Przeczytałem odpowiedź od użytkownika, który twierdził, że działa
foo 2>&1 >& output.log &
spowoduje foo
kontynuowanie działania nawet po wylogowaniu. Według tego użytkownika działało to nawet w połączeniach SSH.
Naprawdę nie wierzyłem w to, ponieważ miałem wrażenie, że w przypadku rozłączenia się z SSH lub zakończenia TTY powłoka, a zatem jej procesy otrzymają SIGHUP, powodując ich zakończenie. To, przy moim założeniu, było jedynym powodem użycia nohup
w takich przypadkach lub tmux
, screen
i in.
Potem zajrzałem do instrukcji glibc :
Ten sygnał jest także wykorzystywany do zgłaszania zakończenia procesu kontrolowania na terminalu zadaniom związanym z tą sesją; zakończenie to skutecznie odłącza wszystkie procesy w sesji od terminala sterującego.
To wydaje się potwierdzać moje myśli. Ale patrząc dalej, mówi :
Jeśli proces jest liderem sesji, który ma terminal kontrolny, wówczas sygnał SIGHUP jest wysyłany do każdego procesu w zadaniu na pierwszym planie, a terminal kontrolny jest odłączany od tej sesji.
Czy to oznacza, że zadania umieszczone w tle nie otrzymają SIGHUP?
Do mojego dalszego zamieszania, wpadłem sesji interaktywnej zsh Ran yes >& /dev/null &
, a wpisane exit
, gdy zsh ostrzegł mnie, że miałem uruchomiony pracy, a po wpisaniu exit
po raz drugi, powiedział mi, że miał SIGHUPed jedną pracę. Wykonanie dokładnie tego samego w Bash pozostawia pracę uruchomioną…
logout
iyes
nadal działa.