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.

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


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 .


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:


1
Nur ein Platzhalter, den ich getestet habe. Mit allem wird es genauso funktionieren.
Kevin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.