Auf einem Ubuntu-Server werden mehrere Bildschirme ausgeführt, die wie folgt initiiert werden:
screen -dmS screen1 cmd
screen -dmS screen2 cmd
etc...
Und ich muss einen Bildschirm abbrechen, aber nicht alle. Was ist der richtige Befehl, um einen bestimmten Bildschirm mit seinem Namen zu beenden? Ich habe die Manpages durchgelesen, aber ich kann den gesuchten Befehl nicht finden.
Außerdem möchte ich diesen Befehl in ein Bash-Skript schreiben, damit ich nicht einfach + screen -r screen1
drücken kann, wie ich es normalerweise tun würde.CtrlX
bash
gnu-screen
kill
BassKozz
quelle
quelle
Antworten:
Von der Manpage:
Du kannst tun :
quelle
Wenn Sie eine machen
screen -list
, werden Sie feststellen, dass jeder Bildschirmname mit einer Zahl beginnt, die die PID des Bildschirms ist:Von dort senden Sie einfach ein KILL-Signal an diese spezifische PID:
und es wird den spezifischen Bildschirm abbrechen.
quelle
Die Lösung von defraagh funktioniert bei mir nicht, aber ich kann die Bildschirmsitzung mit Raphinks Idee beenden:
screen -list liefert die Prozess ID
kill -9 PROCESSID
Bildschirm-wischen SESSIONID
quelle
Wenn Sie mehrere Bildschirme mit demselben Namen haben, können Sie diese gleichzeitig beenden:
Befehl
screen -ls
druckt Bildschirme mit ihrer Prozessnummer. Beispiel: 4773.test ist ein Bildschirm mit der Prozessnummer 4773 und dem Namen test . Beispielausgabe:Befehlsfilter
egrep
über dem Beispieltext, der über eine Pipe-Leitung gesendet wird | .awk -F "." '{print $1}'
extrahiert die erste Spalte jeder Zeile. Das Trennzeichen zwischen den Spalten wird durch die Option -F als Punkt (.) Definiertxargs kill
finally bricht alle Prozesse ab, deren Nummern über pipe | gesendet wurden.xargs
wird verwendet, wenn für jeden Eingang ein Befehl ausgeführt werden soll.quelle
Sie öffnen ein neues Fenster mit
Sie schließen ein Fenster mit
oder Befehl innerhalb des Fensters beenden
quelle
Ich habe damit wie folgt umgegangen:
Die Erklärung ist, dass Sie die Ausgabe von nehmen
screen -ls
und den bestimmten Bildschirm finden, an dem Sie interessiert sind, indem Sie grep verwenden und dann diese Zeichenfolge der Variablen zuweisenprocess
.Da die Ausgabe von
screen -ls
immer die PID gefolgt von einer Periode ist, können Sie cut verwenden, um die Periode und alles, was danach folgt, zu entfernen. Im obigen Beispiel setzen wir das in Klammern und geben es an den Befehl kill weiter, obwohl Sie es auch linear ausführen können, 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 beenden möchten.
quelle