Supponiamo che manchi sia GNU screen
che tmux
(e X11 e console virtuali) ma desideri passare da una shell di login a un'altra shell interattiva.
Prima accedi alla console, quindi avvii una nuova shell, bloccando temporaneamente la shell di accesso. Per riavere la shell di accesso per fare un po 'di lavoro lì, lo faresti suspend
. Quindi dovresti fg
riavere la shell interattiva per continuare con qualunque cosa tu abbia fatto lì.
In effetti, con il controllo dei processi, la shell di accesso potrebbe generare una serie di shell interattive come processi in background a cui è possibile passare fg %1
, fg %2
ecc., Ma per tornare alla shell di accesso, è necessario utilizzare suspend
se non si desidera manualmente kill -s STOP $$
.
Si noti inoltre che Ctrl+ Zal prompt in una shell interattiva non lo sospenderà.
EDIT: inizialmente avevo una lunga sezione ipotetica sull'uso di suspend
in uno script, ma poiché il comando richiede il controllo del lavoro e poiché le shell non interattive di solito non hanno il controllo del lavoro, ho eliminato quella sezione.
La sezione eliminata viene suspend
sostituita da kill -s STOP $$
(questo in realtà non appartiene più alla risposta, ma può comunque essere interessante per gli altri):
Supponiamo che tu abbia un processo in background (uno script) in uno script e che questo processo in background ad un certo punto debba fermarsi e attendere che il processo genitore gli dica di continuare. Questo potrebbe essere in modo che il genitore abbia il tempo di estrarre e spostare i file in posizione o qualcosa del genere.
Lo script figlio sospenderebbe ( kill -s STOP $$
) e lo script padre gli invierebbe un CONT
segnale quando andava bene continuare.
Ti dà l'opportunità di implementare una sorta di sincronizzazione tra un processo genitore e un processo figlio (anche se molto basilare poiché il processo della shell genitore ha più o meno bisogno di indovinare che il processo figlio è sospeso, sebbene ciò possa essere risolto avendo il figlio trap CONT
e non sospendere se quel segnale viene ricevuto troppo presto).
fork/exec
chiamata di sistema