2011-10-14 5 views
5

मैं ऐसा एप्लिकेशन बनाने की कोशिश कर रहा हूं जो यह जांचता है कि यह विशिष्ट एप्लिकेशन चल रहा है या नहीं, फिर निर्दिष्ट समय के बाद ऐप को मार दें। मैं ऐप की पिड पाने की योजना बना रहा हूं। मैं ऐप का पिड कैसे प्राप्त कर सकता हूं?उबंटू जावा: एक विशिष्ट प्रोग्राम की पिड ढूंढें और प्रोग्राम को मारें

धन्यवाद

उत्तर

6

आप दोनों ही मामलों foobar आप को समाप्त करना चाहते ऐप्लिकेशन के नाम पर किया जा रहा में पीआईडी ​​हो रही है, तो इसके खिलाफ kill आदेश जारी करने के लिए ps -aux | grep foobar कोशिश कर सकते हैं, वैकल्पिक रूप से आप pkillfoobar उपयोग कर सकते हैं,।

0

आप शायद होगा ps और kill यूनिक्स Runtime.exec का उपयोग कर कमांड आह्वान और उनके उत्पादन स्क्रैप करने का। मुझे नहीं लगता कि एक जावा प्रोग्राम आसानी से निरीक्षण/एक्सेस प्रक्रियाओं को आसानी से देख सकता है।

1

यदि आप इस एप्लिकेशन को स्क्रिप्ट से शुरू कर रहे हैं तो आप विशेष चर $! का उपयोग करके पृष्ठभूमि में बनाई गई अंतिम प्रक्रिया का ढक्कन प्राप्त कर सकते हैं, यह मान आप अपने शटडाउन फ़ंक्शन पर बाद में उपयोग के लिए फ़ाइल पर सहेज सकते हैं।

nohup java -jar example.jar & 
echo $! > application.pid 
5

जावा प्रक्रियाओं के लिए पीआईडी ​​के -e.g ps -aux | grep java | awk '{print $2}':

नीचे एक उदाहरण है।

आप jps पर भी कॉल कर सकते हैं जो आपको एक प्रक्रिया सूची देगा। इसका एक दोष यह है कि यह आपको केवल jps कमांड जारी करने वाले उपयोगकर्ता के लिए प्रक्रिया दिखाएगा।

3

आप pidof का उपयोग अपने आवेदन

pidof <application name>

1

ps aux | awk '/java/ {print "sleep 10; kill "$2}' | bash

उबंटू में

, ps -aux एक सिंटैक्स त्रुटि फेंकता है, जहां ps aux कार्यों की पीआईडी ​​प्राप्त करने के लिए कर सकते हैं।

आउटपुट awk पर पाइप किया गया है जो जावा के साथ लाइनों से मेल खाता है और 10 सेकंड के लिए सोता है और फिर प्रोग्राम को पीआईडी ​​के साथ मारता है। पाइप को नोटिस करने के लिए नोटिस। हालांकि आप जितनी देर चाहें निर्दिष्ट करने के लिए स्वतंत्र महसूस करें, या कॉल करने के लिए जो भी अन्य कॉल आप उचित महसूस करते हैं। मुझे लगता है कि quesiton के कुछ 'समय के बाद' पकड़ने के लिए उपेक्षित अन्य उत्तरों में से अधिकांश को उपेक्षित किया गया है।

आप इसे pidof java | awk '{print "sleep 10; kill "$1}' | bash पर कॉल करके भी पूरा कर सकते हैं लेकिन पसंद आपकी है। मैं आम तौर पर पीएस ऑक्स का उपयोग करता हूं।

3
यह कैसे के बारे में

तो की एक पीआईडी ​​खोजने के बारे में बता सकते हैं?

public static void killAll(String process) { 
    try { 
     Vector<String> commands = new Vector<String>(); 
     commands.add("pidof"); 
     commands.add(process); 
     ProcessBuilder pb = new ProcessBuilder(commands); 
     Process pr = pb.start(); 
     pr.waitFor(); 
     if (pr.exitValue() != 0) return; 
     BufferedReader outReader = new BufferedReader(new InputStreamReader(pr.getInputStream())); 
     for (String pid : outReader.readLine().trim().split(" ")) { 
      log.info("Killing pid: "+pid); 
      Runtime.getRuntime().exec("kill " + pid).waitFor(); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
}