Bagaimana cara kerja nohup?

8

Pemahaman saya adalah bahwa untuk memblokir sinyal proses seperti SIGHUP, Anda harus melakukannya dari dalam proses sinyal sedang dikirim. Namun, shell Unix suka bashdapat menelurkan proses anak dan memblokir HUPsinyal untuk anak dari dalam orangtua, menggunakan nohupperintah. Bagaimana cara kerjanya? Apakah nohupmemblokir sinyal dan kemudian menjalankan proses anak tanpa forking? Itulah satu-satunya cara yang dapat saya pikirkan.

pengguna628544
sumber

Jawaban:

7

Anda dapat melihat kode sumber implementasi nohup, misalnya coreutilsversi GNU . Ada satu ton pengaturan, beberapa di antaranya untuk tujuan internasionalisasi, sisanya untuk menangani berbagai opsi pengalihan; maka "nohupping" yang sebenarnya terjadi:

  signal (SIGHUP, SIG_IGN);

  char **cmd = argv + optind;
  execvp (*cmd, cmd);

Saat Anda menduga, ini mengatur proses untuk mengabaikan sinyal HUP, kemudian execperintah yang diminta.

Stephen Kitt
sumber
-2

Tindakan menggunakan nohuphanya mengubah PPID dari proses menelurkan ke 1 (init) sehingga ketika shell keluar, itu bukan lagi proses anak dari shell itu dan karenanya tidak menerima HUP.

EDIT: Harus berpikir lebih dulu sebelum saya memposting kadang-kadang. Meninggalkannya di sini untuk mengingatkanku akan rasa maluku :-(

Kafir
sumber