Linux: Beenden Sie den Bildschirm, sobald der Prozess beendet ist

0

Im Moment führe ich einen Prozess auf dem GNU-Bildschirm aus. Bildschirm wird mit dem Befehl gestartet screen -dmS screennameund 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 & exitfolgenden, der jedoch nie ausgeführt wird, wenn ich ihn kill -9 pidfür den Prozess verwende.

Hexacyanid
quelle

Antworten:

4

Starten Sie den Vorgang mit exec, damit er das einzige Element im Bildschirm ist (er ersetzt die Shell, anstatt nach Abschluss zur Shell zurückzukehren).

Alan Curry
quelle
Können Sie mir ein Beispiel geben?
Hexacyanid
Nach der Eingabe werden screen -r screennameSie an einer Shell-Eingabeaufforderung in den Bildschirm eingefügt. Geben Sie an dieser Eingabeaufforderung Folgendes ein: exec yourcommandthen detach.
5

Versuche dies:

screen -dmS screenname sleep 5
sleep 3
screen -ls
sleep 3
screen -ls

Auf der ersten screen -lssollten 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 Sie exec PROGRAManstelle PROGRAMder Shell-Eingabeaufforderung Folgendes eingeben (tatsächlich wird die Shell dadurch beendet und durch ersetzt PROGRAM).

Wenn alles , was Sie benötigen die detach Fähigkeit von Bildschirm und nichts anderes ist, eine leichtgewichtige Alternative ist dtach .

Ryan Thompson
quelle
2

Sie können die Bildschirmsitzung mit dem Namen eines Befehls starten, z. B. screen -dmS session vimwird eine Bildschirmsitzung geöffnet, die mit vim beendet wird. In einer vorhandenen Bildschirmsitzung können Sie execden gleichen Effekt erzielen:

Kevin
quelle
1
Nur ein Platzhalter, den ich getestet habe. Mit allem wird es genauso funktionieren.
Kevin