पता करें कि स्क्रीन सत्र के भीतर कौन सी कमांड चल रही है


10

मैं अक्सर स्क्रीन के भीतर चलने वाले कार्यों को छोड़ देता हूं ताकि बाद में मैं उन पर जांच कर सकूं, लेकिन मुझे कभी-कभी यह जांचने की आवश्यकता होती है कि स्क्रीन के भीतर कौन सी कमांड चल रही है। यह आमतौर पर एक php स्क्रिप्ट होती है, जैसे कि

screen -d -m nice -n -10 php -f convertThread.php start=10000

मैं यह रिकॉर्ड नहीं करता कि कौन सी स्क्रीन किस कमांड पर चल रही है, लेकिन मैं इस प्रक्रिया की जांच किए बिना, यह जानने के लिए कि इस कमांड को चलाने के लिए क्या प्रगति हुई है, के लिए एक महसूस करने में सक्षम होना चाहूंगा।

मुझे स्क्रीन सहायता पृष्ठों में इसके लिए कोई विकल्प नहीं दिखता है।

जवाबों:


18

मुझे हाल ही में ऐसा करना पड़ा। स्टैक ओवरफ्लो पर मैंने उत्तर दिया कि स्क्रीन में चलने वाली प्रक्रिया का पीआईडी कैसे खोजा जाए । एक बार जब आपके पास 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_MonitorPID के लिए bashPPID (पेरेंट 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}')

ओह, चतुर! मुझें यह पसंद है! चूंकि यह सीधे प्रश्न का उत्तर देता है, इसलिए मैं इस उत्तर को स्वीकार करने जा रहा हूं। मैं इसकी सराहना करता हूं! क्षमा करें @Ghanima (: '
ऑस्टिन बुर्क

7

screen -S <your-fancy-name>उनके द्वारा चलाए जाने वाले आदेशों के अनुसार स्क्रीन सत्र को सार्थक नाम देने के लिए उपयोग करने के बारे में क्या ? नामों को सूचीबद्ध किया screen -lsजाएगा और उनका उपयोग सत्र को फिर से शुरू करने के लिए किया जाएगा screen -r <your-fancy-name>

जोड़ने के लिए संपादित करें:

चूंकि यह दूसरे दिन ही मेरे ध्यान में लाया गया है। tmuxकार्यक्षमता का काफी समान सेट प्रदान करता है screen(यदि इससे भी अधिक नहीं) और आपकी आवश्यकताओं के अनुरूप एक सुविधा के साथ आता है। अक्सर पूछे जाने वाले प्रश्न से: "tmux स्वचालित रूप से नाम बदलने के लिए विंडोज़ का उपयोग करता है, जिससे भागने के दृश्यों का उपयोग करते हुए सकल हैक्स के बिना रनिंग एप्लिकेशन को इसका उपयोग किया जा सकता है। डिफ़ॉल्ट रूप से भी।"

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