nohup
menangkap sinyal hangup (lihat man 7 signal
) sedangkan ampersand tidak (kecuali shell dikonfigurasi seperti itu atau tidak mengirim SIGHUP
sama sekali).
Biasanya, saat menjalankan perintah menggunakan &
dan keluar dari shell sesudahnya, shell akan mengakhiri sub-perintah dengan sinyal hangup (kill -SIGHUP <pid>
). Hal ini dapat dicegah dengan menggunakan nohup
, karena menangkap sinyal dan mengabaikannya sehingga tidak pernah mencapai aplikasi yang sebenarnya.
Jika Anda menggunakan bash, Anda dapat menggunakan perintah shopt | grep hupon
untuk mengetahui apakah shell Anda mengirimkan SIGHUP ke proses anaknya atau tidak. Jika tidak aktif, proses tidak akan dihentikan, seperti yang terjadi pada Anda. Informasi lebih lanjut tentang bagaimana bash menghentikan aplikasi dapat ditemukan di sini.
Ada kasus di mana nohup
tidak berfungsi, misalnya saat proses yang Anda mulai menghubungkan kembali SIGHUP
sinyal, seperti yang terjadi di sini.
myprocess.out &
akan menjalankan proses di latar belakang menggunakan subkulit. Jika shell saat ini diakhiri (katakanlah dengan logout), semua subkulit juga diakhiri sehingga proses latar belakang juga akan dihentikan. Perintah nohup mengabaikan HUP
sinyal dan bahkan jika shell saat ini diakhiri, subkulit dan myprocess.out
akan terus berjalan di latar belakang. Perbedaan lainnya adalah &
sendirian tidak mengarahkan ulang stdout/stderr jadi jika ada keluaran atau kesalahan, itu ditampilkan di terminal. nohup di sisi lain mengalihkan stdout/stderr ke nohup.out
atau $HOME/nohup.out
.
Sebagian besar waktu kita masuk ke server jauh menggunakan ssh. Jika Anda memulai skrip shell dan Anda logout maka prosesnya dimatikan. Nohup membantu untuk terus menjalankan skrip di latar belakang bahkan setelah Anda logout dari shell.
Nohup command name &
eg: nohup sh script.sh &
Nohup menangkap sinyal HUP. Nohup tidak menempatkan pekerjaan secara otomatis di latar belakang. Kami perlu mengatakan bahwa secara eksplisit menggunakan &