suspend
ist ein eingebauter Befehl in Bash. Wann würden Sie diesen Befehl natürlich verwenden und ihn nützlich finden?
12
suspend
ist ein eingebauter Befehl in Bash. Wann würden Sie diesen Befehl natürlich verwenden und ihn nützlich finden?
fork/exec
Systemaufruf erforderlich istSTOP
Signal empfangen), wenn sie einen untergeordneten Prozess auslöst . Ich bin auch ein bisschen verwirrt über deinen zweiten Kommentar.wait()
klingt für mich vernünftig. Ich sagte, die Shell hebt sich jedes Mal auf, wenn sie einen untergeordneten Prozess auslöst . Ich habe nichts über den Empfang von Stoppsignalen gesagt, das würde keinen Sinn ergeben.Antworten:
Angenommen, Ihnen fehlen sowohl GNU
screen
als auchtmux
(und X11 sowie virtuelle Konsolen), Sie möchten jedoch zwischen einer Anmeldeshell und einer anderen interaktiven Shell wechseln.Sie würden sich zuerst an der Konsole anmelden und dann eine neue Shell starten, um die Anmeldeshell vorübergehend zu blockieren. Damit die Login-Shell wieder funktioniert, müssen Sie Folgendes tun
suspend
. Dann würdenfg
Sie die interaktive Shell zurückbekommen, um mit dem fortzufahren, was Sie dort getan haben.Tatsächlich könnte die Anmeldeshell bei der Jobsteuerung eine Reihe interaktiver Shells als Hintergrundjobs erzeugen, zu denen Sie wechseln könnten
fg %1
,fg %2
usw. Um jedoch zur Anmeldeshell zurückzukehren, müssten Sie diese verwenden, essuspend
sei denn , Sie möchten dies manuell tunkill -s STOP $$
.Beachten Sie außerdem, dass Ctrl+ Zan der Eingabeaufforderung in einer interaktiven Shell diese Funktion nicht deaktiviert.
BEARBEITEN: Ich hatte anfangs einen langen hypothetischen Abschnitt über die Verwendung
suspend
in einem Skript, aber da der Befehl Jobsteuerung erfordert und nicht interaktive Shells normalerweise keine Jobsteuerung haben, habe ich diesen Abschnitt gelöscht.Gelöschter Abschnitt mit
suspend
ersetzt durchkill -s STOP $$
(dies gehört nicht mehr zur Antwort, kann aber für andere trotzdem interessant sein):Angenommen, Sie haben einen Hintergrundprozess (ein Skript) in einem Skript, und dieser Hintergrundprozess muss zu einem bestimmten Zeitpunkt angehalten werden und warten, bis der übergeordnete Prozess ihn auffordert, fortzufahren. Dies kann der Grund dafür sein, dass die Eltern Zeit haben, Dateien zu extrahieren und an ihren Platz zu verschieben.
Das untergeordnete Skript würde suspend (
kill -s STOP $$
) und das übergeordnete Skript würde einCONT
Signal senden , wenn es in Ordnung wäre, fortzufahren.Es gibt Ihnen die Möglichkeit, eine Art Synchronisation zwischen einem übergeordneten und einem untergeordneten Prozess zu implementieren (obwohl dies sehr einfach ist, da der übergeordnete Shell-Prozess mehr oder weniger davon ausgehen muss, dass der untergeordnete Prozess angehalten ist, obwohl dies durch das Vorhandensein des untergeordneten Prozesses behoben werden kann fangen
CONT
und nicht aussetzen, wenn das Signal zu früh empfangen wird).quelle