
Im Moment führe ich einen Prozess innerhalb von GNU Screen aus. Screen wird mit dem Befehl gestartet screen -dmS screenname
und mit angehängt screen -r screenname
. Ein Prozess wird in der Screen-Sitzung gestartet und nach einiger Zeit beendet.
Wie kann ich den Bildschirm beenden, wenn der darin enthaltene Prozess beendet ist?
Hinweis: Ich würde keine Schleife bevorzugen, daher suche ich nach einer Alternative. Manchmal starte ich den Prozess mit einem , der & exit
ihm folgt, aber das wird nie ausgeführt, wenn ich es kill -9 pid
auf den Prozess anwende.
Antwort1
Starten Sie den Vorgang mit exec
, so dass dies das einzige Element auf dem Bildschirm ist (es ersetzt die Shell, anstatt nach Abschluss zur Shell zurückzukehren).
Antwort2
Versuche dies:
screen -dmS screenname sleep 5
sleep 3
screen -ls
sleep 3
screen -ls
Auf dem ersten screen -ls
sollten Sie Ihre Screen-Sitzung sehen. Auf dem zweiten sollte sie verschwunden sein. Screen wird automatisch beendet, wenn das letzte Fenster geschlossen wird. Da Sie nur ein einziges Programm in Screen ausführen, wird das letzte (und einzige) Fenster in der Screen-Sitzung geschlossen, wenn das Programm beendet wird. Wenn Sie das Programm starten, indem Sie sich an die Screen-Sitzung anschließen und dann den Befehl in der Shell-Eingabeaufforderung innerhalb der Screen-Sitzung eingeben, wartet Screen darauf, dass Ihre Shell beendet wird. Sie können dies veranlassen, wenn das Programm beendet wird, indem Sie exec PROGRAM
statt nur PROGRAM
in der Shell-Eingabeaufforderung eingeben (tatsächlich wird dadurch die Shell beendet und durch ersetzt PROGRAM
).
Wenn Sie nur die Abnehmbarkeit des Bildschirms benötigen und sonst nichts, ist eine leichte Alternativedtach.
Antwort3
Sie können die Bildschirmsitzung mit dem Namen eines Befehls starten. Beispielsweise screen -dmS session vim
wird eine Bildschirmsitzung geöffnet, die mit vim beendet wird. Innerhalb einer bestehenden Bildschirmsitzung können Sie Folgendes verwenden, exec
um denselben Effekt zu erzielen:.