Saya memiliki proses berikut.
Proses Parent - Proses Anak - Proses Anak - Proses Anak
Bagaimana saya bisa membunuh proses induk saja? Saya ingin anak-anak memproses untuk tidak dibunuh. Jika saya mencoba untuk membunuh proses orang tua, anak-anak akan mendapatkan SIGHUP dan akan terbunuh.
Jawaban:
Secara umum, ketika suatu proses menjadi yatim piatu (yaitu, orang tuanya mati) ia diadopsi oleh init.
Situasi khusus yang Anda gambarkan mungkin berlaku untuk proses interaktif ketika terminal pengontrolnya ditutup (dari Wikipedia ):
Untuk mencegah hal ini, proses anak harus memblokir SIGHUP, jadi dalam kebanyakan kasus Anda membutuhkan kerja sama dari proses induk.
Jika proses induknya adalah shell (
bash
,csh
dan sejenisnya) dan Anda ingin perintah yang Anda jalankan tidak berakhir ketika bash selesai, Anda bisa mengawali setiap perintah dengannohup
(dariinfo coreutils "nohup invocation"
):Dalam contoh ini:
find
tidak akan terbunuh ketika shell mengakhiri dan menutup terminal pengendali/dev/ttys000
.Jika skrip shell harus memblokir SIGHUP, gunakan builtin
trap
, seperti yang dijelaskan di sini untukbash
.sumber