Angenommen, Ihnen fehlen sowohl GNU screen
als auch tmux
(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ürden fg
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, es suspend
sei denn , Sie möchten dies manuell tun kill -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 durch kill -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 ein CONT
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).
fork/exec
Systemaufruf erforderlich ist