Im Moment führe ich einen Prozess auf dem GNU-Bildschirm aus. Bildschirm wird mit dem Befehl gestartet screen -dmS screenname
und der mit angehängt screen -r screenname
. Ein Prozess wird in der Bildschirmsitzung gestartet und nach einiger Zeit abgebrochen.
Wie würde ich den Bildschirm beenden lassen, wenn der innere Prozess beendet ist?
Hinweis: Ich würde keine Schleife bevorzugen, daher suche ich nach einer Alternative. Manchmal starte ich den Prozess mit einem & exit
folgenden, der jedoch nie ausgeführt wird, wenn ich ihn kill -9 pid
für den Prozess verwende.
bash
gnu-screen
Hexacyanid
quelle
quelle
screen -r screenname
Sie an einer Shell-Eingabeaufforderung in den Bildschirm eingefügt. Geben Sie an dieser Eingabeaufforderung Folgendes ein:exec yourcommand
then detach.Versuche dies:
Auf der ersten
screen -ls
sollten Sie Ihre Bildschirmsitzung sehen. Beim zweiten sollte es weg sein. Der Bildschirm wird automatisch geschlossen, wenn das letzte Fenster geschlossen wird. Da Sie nur ein einziges Programm auf dem Bildschirm ausführen, wird das letzte (und einzige) Fenster in der Bildschirmsitzung geschlossen, wenn das Programm beendet wird. Wenn Sie das Programm starten, indem Sie eine Verbindung zur Bildschirmsitzung herstellen und dann den Befehl an der Shell-Eingabeaufforderung innerhalb der Bildschirmsitzung eingeben, wartet der Bildschirm darauf, dass Ihre Shell beendet wird. Sie können dies veranlassen, wenn das Programm beendet wird, indem Sieexec PROGRAM
anstellePROGRAM
der Shell-Eingabeaufforderung Folgendes eingeben (tatsächlich wird die Shell dadurch beendet und durch ersetztPROGRAM
).Wenn alles , was Sie benötigen die detach Fähigkeit von Bildschirm und nichts anderes ist, eine leichtgewichtige Alternative ist dtach .
quelle
Sie können die Bildschirmsitzung mit dem Namen eines Befehls starten, z. B.
screen -dmS session vim
wird eine Bildschirmsitzung geöffnet, die mit vim beendet wird. In einer vorhandenen Bildschirmsitzung können Sieexec
den gleichen Effekt erzielen:quelle