Questo è l'equivalente di premere Ctrl+Zaltri comandi.
Sospende la shell e restituisce il controllo alla shell genitore o al processo, se presente.
Esempio:
zsh$ bash
bash-4.4$ cd /
bash-4.4$ suspend
zsh: suspended (signal) bash
zsh$ fg
[1] + continued bash
bash-4.4$ pwd
/
La funzionalità deriva da csh, la shell di BSD (da cui proviene il controllo del lavoro) nei primi anni '80 .
In AT&T ksh, è un alias incorporato per kill -s STOP $$( sì, senza virgolette! )
Nel tuo caso, è bashstato probabilmente quello avviato direttamente dall'emulatore di terminale. E il tuo emulatore di terminale non si aspettava che il processo fosse sospeso.
Quello bashera un leader della sessione. Se il leader della sessione è sospeso, se consideriamo i vecchi terminali temporali, l'utente non avrà modo di riprenderlo.
bashrisolve il problema rifiutando suspendse si tratta di una shell di accesso. Ma nel tuo caso, l'emulatore di terminale probabilmente non si avvia bashin modalità di accesso, quindi la protezione non è in atto.
zshe mkshnon hanno il problema perché inviano un segnale SIGTSTP(quello anche inviato Ctrl+Z) come csh invece di SIGSTOP(e al gruppo di processi del chiamante per mkshcome in csh, e al gruppo di processi principale della shell per zsh, non $$solo il processo ). SIGTSTPviene ignorato quando viene consegnato a un gruppo di processi orfano e il gruppo del leader si qualifica. L'idea è che SIGTSTP non dovrebbe sospendere qualcosa che non può essere ripreso da un utente.
In mksho yash, si può anche usare suspendper far sospendere una subshell:
$ (set -x; sleep 1; suspend; sleep 2)
+ sleep 1
+ suspend
[1] + Stopped(SIGSTOP) (set -x; sleep 1; suspend; sleep 2)
$ fg
[1] (set -x; sleep 1; suspend; sleep 2)
+ sleep 2
Ciò non funzionerebbe con l' zshinvio di SIGTSTP al gruppo di processi principale anziché al chiamante. In qualsiasi shell che ha killincorporato, si può sempre usare kill -s TSTP 0invece.