मुझे हाल ही में ऐसा करना पड़ा। स्टैक ओवरफ्लो पर मैंने उत्तर दिया कि स्क्रीन में चलने वाली प्रक्रिया का पीआईडी कैसे खोजा जाए । एक बार जब आपके पास PID हो तो आप ps
कमांड प्राप्त करने के लिए उपयोग कर सकते हैं । यहां आपकी स्थिति को संबोधित करने के लिए कुछ अतिरिक्त सामग्री के साथ उस उत्तर की सामग्री दी गई है:
आप स्क्रीन सत्रों का पीआईडी यहां प्राप्त कर सकते हैं:
$ screen -ls
There are screens on:
1934.foo_Server (01/25/15 15:26:01) (Detached)
1876.foo_Webserver (01/25/15 15:25:37) (Detached)
1814.foo_Monitor (01/25/15 15:25:13) (Detached)
3 Sockets in /var/run/screen/S-ubuntu.
मान लीजिए कि आप foo_Monitor
स्क्रीन सत्र में बैश में चल रहे कार्यक्रम की पीआईडी चाहते हैं । ज्ञात सत्र foo_Monitor
PID के लिए bash
PPID (पेरेंट PID) खोज कर सत्र की पीआईडी प्राप्त करने के लिए स्क्रीन सत्र की पीआईडी का उपयोग करें :
$ ps -el | grep 1814 | grep bash
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 1815 1814 0 80 0 - 5520 wait pts/1 00:00:00 bash
अब bash
सत्र का सिर्फ पीआईडी प्राप्त करें :
$ ps -el | grep 1814 | grep bash | awk '{print $4}'
1815
अब हम उस PID के साथ प्रक्रिया चाहते हैं । बस आज्ञाओं का घोंसला करें, और इस समय -v
ध्वज का उपयोग grep bash
उस प्रक्रिया को प्राप्त करने के लिए करें जो बैश नहीं है :
$ echo $(ps -el | grep $(ps -el | grep 1814 | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')
23869
हम उस PID का उपयोग कमांड को खोजने के लिए कर सकते हैं (दूसरी पंक्ति के अंत में देखें):
$ ps u -p 23869
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
dotanco+ 18345 12.1 20.1 5258484 3307860 ? Sl Feb02 1147:09 /usr/lib/foo
इसे एक साथ रखें:
$ ps u -p $(ps -el | grep $(ps -el | grep SCREEN_SESSION_PID | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')