Ho letto una risposta da un utente che ha affermato che in esecuzione
foo 2>&1 >& output.log &
si tradurrebbe nel foo
continuare a funzionare anche quando si disconnettono. Secondo questo utente, questo ha funzionato anche su connessioni SSH.
Non credevo davvero che, poiché avevo l'impressione che in caso di disconnessione da SSH o di chiusura del TTY, la shell e quindi i suoi processi avrebbero ricevuto un SIGHUP, causandone la chiusura. Questo, a mio avviso, era l'unico motivo per l'utilizzo nohup
in questi casi, o tmux
, screen
et al.
Ho quindi esaminato il manuale di glibc :
Questo segnale viene anche utilizzato per segnalare la fine del processo di controllo su un terminale ai lavori associati a quella sessione; questa terminazione disconnette efficacemente tutti i processi nella sessione dal terminale di controllo.
Questo sembra confermare i miei pensieri. Ma guardando oltre, dice :
Se il processo è un leader di sessione che ha un terminale di controllo, un segnale SIGHUP viene inviato a ciascun processo nel lavoro in primo piano e il terminale di controllo viene dissociato da quella sessione.
Quindi, questo significa che i lavori messi in background non riceveranno SIGHUP?
Con mia ulteriore confusione, ho eseguito una sessione interattiva di Zsh, ho eseguito yes >& /dev/null &
e digitato exit
, quando Zsh mi ha avvertito che avevo dei lavori in corso e, dopo aver digitato exit
una seconda volta, mi ha detto che aveva SIGHUPed un lavoro. Fare esattamente lo stesso in Bash lascia il lavoro in esecuzione ...
logout
edyes
è ancora in esecuzione.