एक स्क्रीन को मार डालो (लेकिन सभी स्क्रीन नहीं)


19

मेरे पास उबंटू सर्वर पर कई स्क्रीन चल रही हैं जो निम्नानुसार हैं:

screen -dmS screen1 cmd
screen -dmS screen2 cmd
etc...

और मुझे एक स्क्रीन को मारने की जरूरत है, लेकिन उन सभी को नहीं। अपने नाम के साथ एक विशेष स्क्रीन को मारने के लिए सही कमांड क्या है? मैंने मैन पेजों के माध्यम से पढ़ा है, लेकिन मुझे वह कमांड नहीं मिल रही है जिसकी मुझे तलाश है।

इसके अलावा, मैं इस कमांड को बैश स्क्रिप्ट में लिखना चाहता हूं, इसलिए मैं screen -r screen1तब Ctrl+ प्रेस नहीं कर सकता, Xजैसा कि मैं सामान्य रूप से करता हूं।


क्षमा करें, यह सोचा था कि यह गधा काँग के बारे में एक दूसरे के लिए था
चॉपर 3

मुझे यह टी-शर्ट ओहगज़ोमिक्स.com
wp

यह एक अच्छा टी है, ज्यादातर लोग इसे प्राप्त नहीं करेंगे, जब तक कि उन्होंने "द किंग ऑफ कॉन्ग" नहीं देखा है: imdb.com/title/tt0923752
BassKozz

किसी वाक्यांश के ऑब्जेक्ट के लिए सही शब्द "तु" है।
अगली सूचना तक रोक दिया गया।

3
आपने कहा कि "आप इसे प्राप्त करें" यहाँ और नीचे "धन्यवाद"। यह होना चाहिए "इसे प्राप्त करें [के लिए] आप" और "धन्यवाद [करने के लिए] आप"।
अगली सूचना तक रोक दिया गया।

जवाबों:


19

मैन पेज से:

   -X   Send the specified command to a running screen  session.  You  can
        use  the  -d or -r option to tell screen to look only for attached
        or detached screen sessions. Note that this command  doesn't  work
        if the session is password protected.

तुम कर सकते हो :

        screen -X -S <sessionid> kill

उत्तम!!! थैंक्स डिफ्रैग, मस्टा मिस इन द मैन।
बैसकॉज

जानने के लिए अच्छा है :-)
फिंक

9

यदि आप ऐसा करते हैं screen -list, तो आप देखेंगे कि प्रत्येक स्क्रीन का नाम एक नंबर से शुरू होता है, जो स्क्रीन का PID है:

 $ screen -list
There are screens on:
        12281.pts-1.jonah       (12/21/2009 07:53:19 PM)        (Attached)
        10455.pts-1.jonah       (12/19/2009 10:55:25 AM)        (Detached)
2 Sockets in /var/run/screen/S-raphink.

वहां से, बस इस विशिष्ट PID को KILL सिग्नल भेजें:

$ kill 12281

और यह विशिष्ट स्क्रीन को मार देगा।


यह काम नहीं करेगा क्योंकि मैं इसे बैश स्क्रिप्ट से चला रहा हूं, और मुझे पीआईडी ​​को स्क्रीन-लिस्ट से खींचना नहीं है जो सही स्क्रीन से मेल खाता है ... ऊपर दिया गया डीफ्रैग का जवाब एक आकर्षण की तरह काम करता है। धन्यवाद
बैसकॉज

ठीक है, अच्छा है कि डिफ्रैग ने इसके लिए एक सही समाधान किया था।
ℝफिंक

1

डीफ्रैग का समाधान मेरे लिए काम नहीं करता है, हालांकि मैं रैपिंक के विचार का उपयोग करके स्क्रीन सत्र को मार सकता हूं:

स्क्रीन-सूची प्रक्रिया आईडी प्राप्त करें

मारना -9 प्रक्रिया

स्क्रीन -wipe SESSIONID


1

यदि आपके पास एक ही नाम से कई स्क्रीन हैं, तो आप उन्हें एक ही बार में मार सकते हैं:

screen -ls  | egrep "^\s*[0-9]+.ScreenName" | awk -F "." '{print $1}' | xargs kill
  • कमांड screen -lsअपने प्रोसेस नंबर के साथ स्क्रीन प्रिंट करता है। उदाहरण के लिए, 4773.test प्रक्रिया संख्या 4773 और नाम परीक्षण के साथ एक स्क्रीन है । नमूना उत्पादन:

    6322.ss      (05/23/2018 10:39:08 AM)        (Detached)
    6305.sc  (05/23/2018 10:38:40 AM)        (Detached)
    6265.ScreenName       (05/23/2018 10:37:59 AM)        (Detached)
    6249.ScreenName  (05/23/2018 10:37:50 AM)        (Detached)
    6236.scc        (05/23/2018 10:37:42 AM)        (Detached)
  • egrepपाइप लाइन के माध्यम से भेजे गए सैंपल टेक्स्ट के ऊपर कमांड फिल्टर |

  • कमांड awk -F "." '{print $1}'प्रत्येक पंक्ति का पहला कॉलम निकालता है। कॉलम के बीच परिसीमन को विकल्प -F द्वारा डॉट (।) के रूप में परिभाषित किया गया है
  • अंत में कमांड xargs killसभी प्रक्रिया को मार देगा जिसकी संख्या पाइप के माध्यम से भेजी जाती है। xargsका उपयोग तब किया जाता है जब हम प्रत्येक इनपुट पर एक कमांड निष्पादित करना चाहते हैं।

0

आप एक नई विंडो खोलें

Ctrl A + C

आप के साथ एक विंडो बंद करें

Ctrl + D

या खिड़की के बाहर निकलने की आज्ञा


0

Ive इस प्रकार काम कर रहा है:

process=$(screen -ls | grep screen1)
kill $(echo $process | cut -f1 -d'.')
exit

स्पष्टीकरण यह है कि आप आउटपुट लेते हैं screen -lsऔर उस विशेष स्क्रीन को ढूंढते हैं जिसे आप grep का उपयोग करके रुचि रखते हैं फिर उस स्ट्रिंग को चर में असाइन करें process

चूंकि आउटपुट screen -lsहमेशा पीआईडी ​​के बाद होता है, जिसके बाद आप पीरियड से छुटकारा पाने के लिए कट का उपयोग कर सकते हैं और इसके बाद सब कुछ। उपरोक्त उदाहरण में, हम इसे कोष्ठक में रखते हैं और इसे मार कमांड को खिलाते हैं, हालांकि आप इसे रैखिक रूप से कर सकते हैं जिसमें एक अस्थायी फ़ाइल में लिखना और उसमें से पढ़ना शामिल हो सकता है।

आपको यह सुनिश्चित करने की आवश्यकता है कि आपका स्क्रीन नाम अद्वितीय है और वह grep केवल उस स्क्रीन का नाम वापस कर रहा है जिसे आप मारना चाहते हैं।

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