Saya membaca jawaban dari pengguna yang mengklaim menjalankan itu
foo 2>&1 >& output.log &
akan menghasilkan foo
terus berjalan bahkan ketika mereka logout. Menurut pengguna ini, ini bahkan berfungsi melalui koneksi SSH.
Saya tidak benar-benar percaya itu, karena saya mendapat kesan bahwa dalam kasus melepaskan diri dari SSH, atau mengakhiri TTY, shell dan karena itu prosesnya akan menerima SIGHUP, menyebabkan mereka berhenti. Ini, dengan asumsi saya, adalah satu-satunya alasan untuk menggunakan nohup
dalam kasus seperti itu, atau tmux
, screen
dkk.
Saya kemudian melihat ke manual glibc :
Sinyal ini juga digunakan untuk melaporkan penghentian proses pengendalian pada terminal ke pekerjaan yang terkait dengan sesi itu; penghentian ini secara efektif memutuskan semua proses dalam sesi dari terminal pengendali.
Ini sepertinya menguatkan pikiran saya. Tetapi melihat lebih jauh, dikatakan :
Jika proses adalah pemimpin sesi yang memiliki terminal pengendali, maka sinyal SIGHUP dikirim ke setiap proses di pekerjaan latar depan, dan terminal pengendali dipisahkan dari sesi itu.
Jadi, apakah ini berarti pekerjaan yang diletakkan di latar belakang tidak akan menerima SIGHUP?
Untuk kebingungan saya lebih lanjut, saya menjalankan sesi Zsh interaktif, berlari yes >& /dev/null &
, dan mengetik exit
, ketika Zsh memperingatkan saya bahwa saya telah menjalankan pekerjaan, dan setelah mengetik exit
untuk yang kedua kalinya, mengatakan kepada saya bahwa itu telah MENGHAPUS satu pekerjaan. Melakukan hal yang persis sama di Bash membuat pekerjaan tetap berjalan ...
logout
danyes
masih berjalan.