Làm thế nào tôi có thể tìm ra, java jar-file nào hiện đang chạy (và các PID của chúng)?


12

Tôi có một .jartập tin nổi tiếng về sự cố. Khi một sự cố xảy ra, chỉ có một khởi động lại giúp. Tôi có một cách để phát hiện sự cố đó (đọc tệp nhật ký đã nói .jar) Vì vậy, tôi muốn viết một tập lệnh, nó sẽ giết quá trình bất cứ khi nào sự cố xảy ra. Vấn đề là:

confus@confusion:~$ ps -A
...
4438 ?        00:00:00 java
4439 ?        00:00:00 java
4443 ?        00:00:00 java
...

Tên tiến trình của tất cả các .jars đang chạy tự nhiên là "java". Làm thế nào để tôi tìm ra, cái nào trong số các quá trình "java" này là cái tôi muốn giết, tức là cái đang chạy foobar.jar?


Lưu ý rằng nếu bạn chạy như cùng một người dùng, bạn có thể đính kèm với nó bằng cách sử dụng ví dụ visualvm và kiểm tra nó trước khi bạn giết nó.
Thorbjørn Ravn Andersen

Câu trả lời:


11

Bạn có thể chạy lsoflệnh, trong đó liệt kê các quá trình có tệp đang mở, với tệp jar của bạn được cung cấp dưới dạng đối số. Một ví dụ xem một tệp có ít hơn:

egil@mutter:~$ lsof foo.c
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
less    18871 egil    4r   REG    8,2        0 53862540 foo.c
egil@mutter:~$

Để dễ dàng sử dụng lại pid trong tập lệnh, bạn có thể chạy nó ở chế độ ngắn gọn:

egil@mutter:~$ lsof -t foo.c
18871

Câu trả lời này thậm chí còn tốt hơn. +1.
Octavian A. Damiean

7

Sử dụng ps axsẽ giúp.

Nó sẽ hiển thị cây quy trình theo kiểu BSD, đơn giản chỉ ra nhiều thông tin hơn.

Để tìm quy trình cụ thể của bạn, bạn chỉ cần grep cho tên JAR. ps ax | grep JARNAMEsẽ làm điều đó.


1

Bạn có thể thực hiện điều này hoặc nếu "lsof" không được cài đặt qua / Proc // fd Ví dụ:

ps -ef|grep -w java
...
0c4       6917  6916  0 12:22 pts/7    00:00:00 java
...

ls -la /proc/6917/fd/
total 0
dr-x------ 2 0c4 svauser  0 Apr  2 12:23 .
dr-xr-xr-x 9 0c4 svauser  0 Apr  2 12:22 ..
lrwx------ 1 0c4 svauser 64 Apr  2 12:23 0 -> /dev/pts/7
lrwx------ 1 0c4 svauser 64 Apr  2 12:23 1 -> /dev/pts/7
lrwx------ 1 0c4 svauser 64 Apr  2 12:23 2 -> /dev/pts/7
lr-x------ 1 0c4 svauser 64 Apr  2 12:23 3 -> /opt/jdk1.8.0_191/jre/lib/rt.jar
lr-x------ 1 0c4 svauser 64 Apr  2 12:23 4 -> /media/veracrypt1/Downloads/rr/testone.jar
lr-x------ 1 0c4 svauser 64 Apr  2 12:23 5 -> /usr/share/java/gnu-getopt-1.0.14.jar

0

Bạn có thể sử dụng jpsvới các -ltùy chọn sẽ trả về tệp .jar được sử dụng với đường dẫn đầy đủ.

-l Hiển thị tên gói đầy đủ cho lớp chính của ứng dụng hoặc tên đường dẫn đầy đủ vào tệp JAR của ứng dụng.


jps không có trong thời gian chạy Java có sẵn khi câu hỏi được hỏi. Nó có sẵn trong những người có sẵn ngày hôm nay.
Thorbjørn Ravn Andersen

Tôi có thể thấy nó trên các tài liệu Java SE 6: docs.oracle.com/javase/6/docs/technotes/tools/share/jps.html và đó là từ tháng 12 năm 2006 như tôi có thể thấy ở đây: en.wikipedia.org/ wiki / Java_version_history # Java_SE_7
frobledmartin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.