मैं कैसे पता लगा सकता हूं कि वर्तमान में कौन-सी जार-फाइल जावा चल रही है (और उनके पीआईडी)?


12

मेरे पास एक .jarफाइल है जो खराबी के लिए कुख्यात है। जब कोई खराबी होती है, तो केवल एक पुनरारंभ मदद करता है। मेरे पास यह पता लगाने का एक तरीका है कि खराबी (कहा की लॉग-फाइल को पढ़ना .jar) तो मैं एक स्क्रिप्ट लिखना चाहता हूं, जो कि खराबी होने पर प्रक्रिया को मार देता है। यह समस्या है:

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

सभी चलने वाले .jarएस का प्रक्रिया नाम स्वाभाविक रूप से "जावा" है। मुझे कैसे पता चलेगा कि इनमें से कौन सा "जावा" -प्रोसेस है जिसे मैं मारना चाहता हूं, यानी जो चल रहा है foobar.jar?


ध्यान दें कि यदि आप एक ही उपयोगकर्ता के रूप में चलाते हैं, तो आप उदाहरण के लिए विजुअल्म का उपयोग करके इसे संलग्न कर सकते हैं और इसे मारने से पहले इसका निरीक्षण कर सकते हैं।
Thorbjørn Ravn Andersen

जवाबों:


11

आप lsofकमांड चला सकते हैं , जो सूचीबद्ध करता है कि कौन सी प्रक्रिया में खुली फाइलें हैं, एक तर्क के रूप में आपकी जार फ़ाइल दी गई है। कम उदाहरण वाली फ़ाइल देखने का एक उदाहरण:

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

किसी स्क्रिप्ट में पिड का आसानी से पुन: उपयोग करने के लिए, आप इसे ट्रिक मोड में चला सकते हैं:

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

यह उत्तर और भी बेहतर है। +1।
ऑक्टेवियन ए। डामियन

7

उपयोग करने ps axसे मदद मिलेगी।

यह बीएसडी शैली में प्रक्रिया ट्री प्रदर्शित करेगा जो बस अधिक जानकारी दिखाता है।

अपनी विशेष प्रक्रिया को खोजने के लिए आपको सिर्फ JAR नाम के लिए grep करना होगा। 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उन -lविकल्पों के साथ उपयोग कर सकते हैं जो पूर्ण पथ के साथ उपयोग की गई .jar फ़ाइल लौटाएंगे।

-l आवेदन के मुख्य वर्ग के लिए पूर्ण पैकेज नाम या आवेदन की जार फ़ाइल के लिए पूर्ण पथ नाम प्रदर्शित करता है।


सवाल पूछने पर उपलब्ध जावा रनटाइम में jps मौजूद नहीं था। यह आज उपलब्ध लोगों में उपलब्ध है।
Thorbjørn Ravn Andersen

मैं यह जावा SE 6 डॉक्स पर देख सकते हैं: docs.oracle.com/javase/6/docs/technotes/tools/share/jps.html , और के रूप में मैं यहाँ देख सकते हैं कि दिसंबर 2006 से है: en.wikipedia.org/ wiki / Java_version_history # Java_SE_7
froblesmartin
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.