ฉันจะทราบได้อย่างไรว่า jar-files java กำลังทำงานอยู่ในขณะนี้ (และ PID ของพวกเขา)


12

ฉันมี.jarไฟล์ที่มีชื่อเสียงสำหรับความผิดปกติ เมื่อเกิดความผิดปกติจะมีเพียงการรีสตาร์ทเท่านั้น ฉันมีวิธีการตรวจสอบว่าทำงานผิดปกติ (อ่านล็อกไฟล์ของกล่าวว่า.jar) ดังนั้นฉันต้องการที่จะเขียนสคริปต์ที่ฆ่ากระบวนการเมื่อใดก็ตามที่เกิดความผิดปกติ ปัญหาคือ:

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

ชื่อกระบวนการของการรันทั้งหมด.jarนั้นเป็น "java" ตามธรรมชาติ ฉันจะรู้ได้อย่างไรว่า "java" - โปรเซสใดเป็นตัวที่ฉันต้องการฆ่านั่นคืออันที่ทำงานอยู่foobar.jar?


โปรดทราบว่าหากคุณเรียกใช้ในฐานะผู้ใช้รายเดียวกันคุณสามารถแนบไฟล์โดยใช้อินสแตนซ์ visualvm และตรวจสอบก่อนที่คุณจะฆ่ามัน
Thorbjørn Ravn Andersen

คำตอบ:


11

คุณสามารถเรียกใช้lsofคำสั่งซึ่งแสดงรายการกระบวนการที่มีไฟล์เปิดด้วยไฟล์ jar ของคุณที่กำหนดเป็นอาร์กิวเมนต์ ตัวอย่างการดูไฟล์ที่มีน้อย:

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:~$

หากต้องการนำ pid กลับมาใช้ใหม่ในสคริปต์อย่างง่ายดายคุณสามารถเรียกใช้ได้ในโหมด terse:

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

คำตอบนี้ดียิ่งขึ้น +1
Octavian A. Damiean

7

การใช้ps axจะช่วย

มันจะแสดงแผนผังกระบวนการในรูปแบบ BSD ซึ่งจะแสดงข้อมูลเพิ่มเติม

เพื่อค้นหากระบวนการเฉพาะของคุณคุณต้อง grep สำหรับชื่อ JAR ps ax | grep JARNAMEจะทำมัน


1

คุณสามารถทำสิ่งนี้ดั้งเดิมหรือหาก "lsof" ไม่ได้ติดตั้งผ่าน / proc // fd ตัวอย่าง:

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

jps ไม่ปรากฏในรันไทม์ Java ที่มีเมื่อถามคำถาม มันมีอยู่ในที่มีอยู่ในปัจจุบัน
Thorbjørn Ravn Andersen

ฉันสามารถดูได้ในเอกสาร Java SE 6: docs.oracle.com/javase/6/docs/technotes/tools/share/jps.htmlและนั่นคือตั้งแต่ธันวาคม 2549 ที่ฉันเห็นนี่: en.wikipedia.org/ wiki / Java_version_history # Java_SE_7
froblesmartin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.