Apa fungsi dari perintah nohup?

18

Saya seorang pemula di Ubuntu. Saya telah belajar suatu perintah

nohup [command]- Jalankan <command>kekebalan terhadap sinyal hangup

Saya tidak bisa mengerti arti dari " kebal terhadap sinyal hangup ". Apa jenis sinyal yang dibicarakannya? Dan tolong beri tahu saya cara menggunakan perintah ini dengan sebuah contoh.

coding_ninza
sumber
Jika tersedia di shell Anda, disownadalah alternatif yang lebih baik nohup. Latar belakang perintah dengan command &atau Ctrl-Z, lalu gunakan disownuntuk melepaskannya dari shell.
John Kugelman mendukung Monica
@JohnKugelman yang tidak mencukupi , Anda harus mengalihkan aliran input, output, dan error juga. Jadi mengapa tidak menggunakan 'nohup' yang melakukan ini secara otomatis untuk Anda?
miracle173

Jawaban:

34

Biarkan kami mempertimbangkan Anda telah membuka gediteditor teks dari terminal dan bekerja di sana. Jika Anda menutup terminal sebelum menutup gedit, gedit juga akan ditutup segera setelah menutup terminal. Jadi apa yang terjadi di sini? The geditberjalan sebagai proses anak di bawah terminal. Ketika Anda menutup terminal, sinyal menggantung ( SIGHUP) dikirim ke proses yang membunuh proses anak.

Di sisi lain, jika Anda ingin proses anak Anda (di sini gedit) tetap berjalan bahkan setelah menutup terminal induk, Anda ingin proses Anda kebal terhadap sinyal hangup. Sehingga menutup terminal jangan menutup proses anak. nohupmelakukan pekerjaan ini dengan tepat.

nohuptidak memutuskan perintah dari terminal , itu membuat skrip Anda mengabaikan SIGHUP, dan mengalihkan stdout / stderr ke file nohup.out, sehingga perintah dapat terus berjalan di latar belakang setelah Anda logout. Jika Anda menutup shell / terminal atau logout, perintah Anda bukan lagi anak dari shell itu. Itu milik proses init. Jika Anda mencari di dalam, pstreeAnda akan melihatnya sekarang dimiliki oleh proses 1 (init). Itu tidak dapat dibawa kembali ke latar depan karena latar depan tidak ada lagi.

souravc
sumber
16

Selain apa yang ditulis @sourvac, ini adalah warisan dari Back In The Day ketika orang masuk melalui terminal bodoh hanya teks, sering melalui modem (asli, analog 110 baud): "hang up" secara harfiah adalah "menutup telepon" ".

Pid yang kebal terhadap sinyal hangup akan tetap berjalan bahkan setelah Anda keluar dan menutup telepon . Ini sangat berguna pada komputer yang lambat ketika pekerjaan berjalan berjam-jam, dan Anda tidak bisa tetap masuk (orang lain perlu menggunakan terminal, Anda perlu menggunakan telepon, statis di telepon mungkin "bzzt" koneksi , dll).

RonJohn
sumber
1
Bukan hanya kembali pada hari itu. Saya menjalankan sebagian besar pekerjaan besar saya di server cluster yang saya ssh. Jika saya tidak menggunakan nohup, saya harus meninggalkan laptop saya terhubung ke mesin-mesin itu selama berhari-hari sambil menunggu pekerjaan selesai.
Ray
@Ray bagaimana menjalankannya via "at" atau sebagai cron jobs?
RonJohn
@RonJohn Sure. Atau melalui mesin grid. Saya tidak bermaksud menyarankan nohup adalah satu-satunya pilihan, hanya saja masih digunakan untuk tujuan ini hari ini.
Ray
1
Mungkin komentar historis Anda benar. Tetapi kesimpulan Anda tentang pentingnya saat ini salah. Ini tidak berguna pada komputer yang lambat tetapi berguna untuk pekerjaan yang berjalan lama. Ini adalah dua hal yang berbeda. Anda menggunakan 'nohup' untuk melindungi pekerjaan Anda dari pemutusan terminal Anda yang dimaksudkan atau tidak. Bahkan saat ini Anda tidak senang jika suatu pekerjaan dibatalkan karena kesalahan jaringan memutuskan terminal Anda dan pekerjaan Anda dibatalkan.
miracle173
@Ray Cron pekerjaan benar-benar tidak pantas untuk mencapai ini. Cronjobs adalah untuk tugas-tugas berkala, Anda harus mengatur lingkungan di cronjob dan mempertimbangkan banyak hal lainnya. Mungkin 'at' sedikit lebih mudah untuk ditangani tetapi lebih kompleks daripada nohup.
miracle173