Frage Töte einen Bildschirm (aber nicht alle Bildschirme)


Ich habe mehrere Bildschirme auf einem Ubuntu-Server, die wie folgt initiiert werden:

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

Und ich muss einen Bildschirm ausschalten, aber nicht alle. Was ist der richtige Befehl, um einen bestimmten Bildschirm mit seinem Namen zu töten? Ich habe das gelesen Manpages aber ich kann den Befehl, nach dem ich suche, nicht finden.

Auch ich möchte diesen Befehl in ein Bash-Skript schreiben, damit ich nicht einfach kann screen -r screen1 dann drücken Strg+X wie ich es normalerweise tun würde.


18
2017-12-21 18:45


Ursprung


Entschuldigung, dachte, das war für eine Sekunde Donkey Kong - Chopper3
Ich liebe dieses T-Shirt ohgizmo.com/wp-content/uploads/2008/11/... - Chopper3
Das ist ein schönes Tee, die meisten Leute werden es nicht verstehen, es sei denn, sie haben "The King of Kong" gesehen: imdb.com/title/tt0923752 - BassKozz
Das richtige Wort für ein Objekt einer Phrase ist "dir". - Dennis Williamson
Du hast gesagt "hol es dir" hier und "Danke" unten. Es sollte "es dir holen" und "dir sei Dank" sein. - Dennis Williamson


Antworten:


Von der man-Seite:

   -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.

Du kannst tun :

        screen -X -S <sessionid> kill

19
2017-12-21 18:56



PERFEKT!!! Danke Defraagh, musta das in dem Mann vermisst. - BassKozz
Gut zu wissen :-) - ℝaphink


Wenn Sie ein tun screen -listSie werden feststellen, dass jeder Bildschirmname mit einer Zahl beginnt, die die PID des Bildschirms ist:

 $ 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.

Von dort senden Sie einfach ein KILL-Signal an diese spezifische PID:

$ kill 12281

und es wird den spezifischen Bildschirm töten.


9
2017-12-21 18:54



das wird nicht funktionieren, weil ich es von einem Bash-Skript aus führe, und ich muss die PID nicht aus dem Bildschirm ziehen - die Liste entspricht dem richtigen Bildschirm ... die obige Antwort von defraagh wirkte wie ein Zauberspruch. Danke. - BassKozz
Ok, gut, dass Defraagh eine perfekte Lösung dafür hatte. - ℝaphink


Die Lösung von Defraagh funktioniert nicht für mich, aber ich kann die Bildschirmsitzung mit Raphinks Idee beenden:

screen -list erhält die Prozess-ID

kill -9 PROZESSID

Bildschirm-wischen SESSIONID


1
2017-09-29 19:26





Wenn Sie mehrere Bildschirme mit demselben Namen haben, können Sie sie sofort löschen:

screen -ls  | egrep "^\s*[0-9]+.ScreenName" | awk -F "." '{print $1}' | xargs kill
  • Befehl screen -ls Druckt Bildschirme mit ihrer Prozessnummer. Zum Beispiel, 4773.test ist ein Bildschirm mit Prozessnummer 4773 und der Name Prüfung. Beispielausgabe:

    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)
    
  • Befehl egrep Filter über Beispieltext, der über eine Pipe-Leitung gesendet wird |.

  • Befehl awk -F "." '{print $1}' extrahiert die erste Spalte jeder Zeile. Trennzeichen zwischen Spalten ist definiert als Punkt (.) nach Wahl -F
  • Schließlich Befehl xargs kill wird alle Prozesse beenden, deren Nummern über Pipe | gesendet wurden. xargs wird verwendet, wenn wir einen Befehl an jedem der Eingänge ausführen möchten.

1
2018-05-23 11:11





Sie öffnen ein neues Fenster mit

Ctrl A + C

Sie schließen ein Fenster mit

Ctrl + D

oder beenden Sie den Befehl im Fenster


0
2018-05-23 15:09





Ich habe mich damit wie folgt beschäftigt:

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

Die Erklärung ist, dass Sie die Ausgabe von screen -ls und suchen Sie den gewünschten Bildschirm, indem Sie grep verwenden, und weisen Sie diesen String der Variablen zu process.

Seit der Ausgabe von screen -ls ist immer die PID, gefolgt von einer Periode, die Sie dann verwenden können, um die Periode und alles danach loszuwerden. Im obigen Beispiel fügen wir das in Klammern ein und führen es dem Befehl kill zu, obwohl Sie es linear machen könnten, was das Schreiben in eine temporäre Datei und das Auslesen daraus beinhalten könnte.

Sie müssen sicherstellen, dass Ihr Bildschirmname eindeutig ist und dass grep NUR den Namen des Bildschirms zurückgibt, den Sie löschen möchten.


0
2018-02-25 01:39