जावा प्रक्रियाओं की सूची


113

मैं कैसे जावा में सभी जावा प्रक्रियाओं को सूचीबद्ध कर सकता हूं? मुझे कमांड लाइन की आवश्यकता है। मुझे पता है कि कमांड है, psलेकिन मुझे नहीं पता कि मुझे किन मापदंडों का उपयोग करने की आवश्यकता है।


1
कृपया इस पर शोध करने और अपनी समस्या का वर्णन करने में थोड़ा और प्रयास करें, वास्तव में आपके द्वारा की गई बातों के आधार पर बहुत सारी संभावनाएं हैं।
Mat

3
अगर आपको पता है psतो पहले प्रयास करें man ps, info psऔर इंटरनेट में इसके बारे में जानें।
ssapkota

जवाबों:


148

प्रयत्न:

ps aux | grep java

और देखें कि आप कैसे प्राप्त करते हैं


109

हाल ही में जावा जावा वर्चुअल मशीन प्रोसेस स्टेटस टूल "jps" के साथ आता है

http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jps.html

उदाहरण के लिए,

[nsushkin@fulton support]$ jps -m
2120 Main --userdir /home/nsushkin/.netbeans/7.0 --branding nb
26546 charles.jar
17600 Jps -m

2
बस एक नोट: JDK के साथ केवल जहाज कूदता है, JRE नहीं। उन पर सादे ol 'Java रनटाइम्स वाली मशीनों में यह उपकरण नहीं होगा।
अगुआजेल्स

मैं जावा प्रक्रिया चलाने की गणना कैसे कर सकता हूं?
जेट

50
jps -lV

सबसे उपयोगी है। प्रिंट्स सिर्फ मुख्य वर्ग के योग्य और योग्य हैं:

2472 com.intellij.idea.Main
11111 sun.tools.jps.Jps
9030 play.server.Server
2752 org.jetbrains.idea.maven.server.RemoteMavenServer

31

आप एकल कमांड pgrep का उपयोग कर सकते हैं (आपको पाइप और कई कमांड का उपयोग करने की आवश्यकता नहीं है):

pgrep -fl java

27

जावा 7 से शुरू करना , सबसे सरल तरीका और कम त्रुटि प्रवण है बस उस कमांड का उपयोग करना jcmd है जो जेडीके का हिस्सा है जैसे कि यह सभी ओएस पर एक ही तरह से काम करेगा।

उदाहरण:

> jcmd
5485 sun.tools.jcmd.JCmd
2125 MyProgram

jcmd चल रहे जावा वर्चुअल मशीन (JVM) में डायग्नोस्टिक कमांड अनुरोध भेजने की अनुमति देता है।

उपयोग करने के तरीके केjcmd बारे में अधिक जानकारी ।

यह भी देखें उपयोगिताjcmd


1
वाह, यह और भी बेहतर हैjps
श्रीधर सरनोबत


12

यह लिनक्स पर्यावरण में चल रहे सभी जावा प्रक्रियाओं को वापस कर देगा। फिर आप प्रक्रिया आईडी का उपयोग करके प्रक्रिया को मार सकते हैं।

ps -e|grep java


6

अगर मुझे केवल जावा प्रक्रिया की सूची चाहिए, तो उपयोग करें:

ps -A | grep java

5
pgrep -l java
ps -ef | grep java

5
इस कोड स्निपेट के लिए धन्यवाद, जो कुछ तत्काल सहायता प्रदान कर सकता है। एक उचित व्याख्या यह दर्शाती है कि यह समस्या का एक अच्छा समाधान क्यों है, यह दिखाते हुए इसके शैक्षिक मूल्य में बहुत सुधार करेगा , और यह भविष्य के पाठकों के लिए समान के साथ अधिक उपयोगी होगा, लेकिन समान नहीं, प्रश्न। कृपया स्पष्टीकरण जोड़ने के लिए अपने उत्तर को संपादित करें, और इस बात का संकेत दें कि क्या सीमाएँ और मान्यताएँ लागू होती हैं। विशेष रूप से, उनमें से दूसरा grepप्रक्रिया क्यों नहीं दिखाता है?
टोबे स्पाइट

4
ps axuwww | grep java | grep -v grep

उपरोक्त इच्छा

  • लंबी लाइनों के साथ आप सभी प्रक्रियाओं को दिखाने (जैसे: www)
  • फ़िल्टर (grep) में केवल वही रेखाएँ होती हैं जिनमें जावा शब्द होता है, और
  • "grep जावा" लाइन को फ़िल्टर करें :)

(btw, यह उदाहरण प्रभावी नहीं है, लेकिन याद रखने में आसान है);)

आप उदाहरण के लिए, अन्य कमांड में ऊपर पाइप कर सकते हैं:

ps axuwww | grep java | grep -v grep | sed '.....'  | while read something
do
    something_another $something
done

आदि...


3

जब मैं जानना चाहता हूं कि क्या एक निश्चित जावा वर्ग निष्पादित हो रहा है, तो मैं निम्नलिखित कमांड लाइन का उपयोग करता हूं:

ps ww -f -C java | grep "fully.qualified.name.of.class"

ओएस की ओर से देखने पर, प्रक्रिया का कमांड नाम "जावा" है। "Ww" विकल्प कोलम के अधिकतम वर्णों को चौड़ा करता है, इसलिए संबंधित वर्ग के FQN को पकड़ना संभव है।


यह वही है जो मैं देख रहा था - $ topबस "जावा" को कमांड के रूप में देता है जो कि यह सब उपयोगी नहीं है जब यह पता लगाने की कोशिश की जा रही है कि कौन सी प्रक्रिया सीपीयू को हॉगिंग कर रही है। $ ps ww -fC javaपहेली के लापता टुकड़े प्रदान करता है।
डेविड क्लार्क

2

jps और jcmd मुझे कोई परिणाम नहीं दिखा रहा था जब मैंने redjat linux पर openjdk-1.8 का उपयोग करके इसे आज़माया। लेकिन यहां तक ​​कि अगर यह किया यह केवल वर्तमान उपयोगकर्ता के तहत प्रक्रियाओं को दिखाता है जो मेरे मामले में काम नहीं करता है। Ps का उपयोग करना। grep जो मैंने किया वह समाप्त हो गया है लेकिन कुछ जावा एप्स के लिए क्लास का रास्ता बहुत लंबा हो सकता है जिससे परिणाम अवैध हो जाते हैं इसलिए मैंने इसे हटाने के लिए sed का उपयोग किया। यह अभी भी थोड़ा मोटा है, लेकिन इसके अलावा सब कुछ हटा देता है: पीआईडी, उपयोगकर्ता, जावा-क्लास / जार, आर्ग्स।

ps -o pid,user,cmd -C java | sed -e 's/\([0-9]\+ *[^ ]*\) *[^ ]* *\([^$]*\)/\1 \2/' -e 's/-c[^ ]* [^ ]* \|-[^ ]* //g'

परिणाम कुछ इस तरह दिखते हैं:

  PID USER     CMD
11251 userb org.apache.zookeeper.server.quorum.QuorumPeerMain ../config/zookeeper.properties
19574 userb com.intellij.idea.Main
28807 root org.apache.nifi.bootstrap.RunNiFi run
28829 root org.apache.nifi.NiFi

सभी प्रक्रियाओं को सूचीबद्ध करने के लिए खिड़कियों पर एक विकल्प है:

WMIC path win32_process where "Caption='java.exe'" get ProcessId,Commandline

लेकिन इसे और अधिक उपयोगी बनाने के लिए कुछ पार्सिंग की आवश्यकता है।


1

ऐसा करने के कई तरीके हैं। आप उपयोग कर सकते हैं java.lang.ProcessBuilderऔर "pgrep" की तरह कुछ के साथ प्रक्रिया आईडी (पीआईडी) प्राप्त करने के लिए: pgrep -fl java | awk {'print $1'}। या, यदि आप लिनक्स के तहत चल रहे हैं, तो आप /procनिर्देशिका को क्वेरी कर सकते हैं ।

मुझे पता है, यह भयानक और गैर पोर्टेबल लगता है, और यहां तक ​​कि खराब तरीके से कार्यान्वित किया जाता है, मैं सहमत हूं। लेकिन क्योंकि जावा वास्तव में एक वीएम में चलता है, कुछ बेतुके कारणों से कि मैं वास्तव में अधिक समय के बाद पता नहीं लगा सकता कि 15 साल तक जेडीके काम कर रहा है, यही कारण है कि जेवीएम अंतरिक्ष के बाहर चीजों को देखना संभव नहीं है, यह वास्तव में आपके साथ हास्यास्पद है। इसके बारे में सोचो। आप सब कुछ और कुछ कर सकते हैं, यहां तक कि forkऔर joinबच्चे प्रक्रियाओं (उन मल्टीटास्किंग जब दुनिया के बारे में पता नहीं था की एक भयानक तरीका थे धागे या pthreads , क्या एक नरक! क्या जावा के साथ पर में हो रहा है ?! :)।

इससे मुझे पता चल जाएगा कि मुझे बहुत अधिक चर्चा है, लेकिन वैसे भी, एक बहुत अच्छा एपीआई है जिसे मैंने पहले ही अपनी परियोजनाओं में इस्तेमाल किया है और यह काफी स्थिर है ( यह ओएसएस है इसलिए आपको अभी भी एपीआई पर भरोसा करने से पहले आपके द्वारा उपयोग किए जाने वाले हर संस्करण का परीक्षण करने की आवश्यकता है ): https : //github.com/jezhumble/javasysmon

JavaDoc: http://jezhumble.github.io/javasysmon/ , वर्ग के लिए खोज करें com.jezhumble.javasysmon.OsProcess, वह ट्रिक करेगी। आशा है कि यह मदद की, भाग्य का सबसे अच्छा।


1
 ps -eaf | grep [j]ava

यह बेहतर है क्योंकि यह केवल आपको सक्रिय प्रक्रियाओं को दिखाएगा जिसमें यह कमांड शामिल नहीं है जो कि java string भी []करता है


यह ps -eaf होना चाहिए | grep Java नहीं [j] ava
vaquar khan

@ जवाहरखास दोस्त सिर्फ आपके और मेरे दोनों सुझावों को चलाने की कोशिश करते हैं और देखते हैं कि अंतर क्या है, वे दोनों काम करेंगे
इल्या गज़मैन

दोनों एक ही परिणाम देते हैं लेकिन [जे] एवा भ्रमित कर रहा है
वाकर खान


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.