Przeczytałem odpowiedź od użytkownika, który twierdził, że działa
foo 2>&1 >& output.log &
spowoduje fookontynuowanie 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 nohupw takich przypadkach lub tmux, screeni 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 exitpo raz drugi, powiedział mi, że miał SIGHUPed jedną pracę. Wykonanie dokładnie tego samego w Bash pozostawia pracę uruchomioną…
logoutiyesnadal działa.