Tidak, saat Anda menghentikan proses sendirian, proses tersebut tidak akan membunuh anak-anak.
Anda harus mengirim sinyal ke grup proses jika Anda ingin semua proses untuk grup tertentu menerima sinyal
Misalnya, jika id proses induk Anda memiliki kode 1234, Anda harus menentukan parentpid dengan menambahkan simbol minus diikuti dengan id proses induk Anda:
kill -9 -1234
Jika tidak, anak yatim akan ditautkan ke init
, seperti yang ditunjukkan oleh tangkapan layar ketiga Anda (PPID anak telah menjadi 1).
-bash:kill:(-123) - Tidak ada proses seperti itu
Dalam sesi Terminal.app interaktif, nomor id grup proses latar depan dan nomor id grup proses latar belakang berbeda berdasarkan desain saat mode kontrol/monitor pekerjaan diaktifkan. Dengan kata lain, jika Anda menjalankan perintah di latar belakang dalam sesi Terminal.app yang mengaktifkan kontrol pekerjaan, $!
pid dari proses latar belakang sebenarnya adalah nomor id grup proses baru (pgid).
Namun, dalam skrip yang tidak mengaktifkan kontrol pekerjaan, ini mungkin bukan masalahnya! Pid dari proses latar belakang mungkin bukan pgid baru tetapi pid normal! Dan inilah yang menyebabkan munculnya pesan error -bash: kill: (-123) - No such process
, mencoba mematikan grup proses tetapi hanya menentukan pid normal (bukan pgid) ke kill
perintah.
# the following code works in Terminal.app because $! == $pgid
{
sleep 100 &
IFS=" " read -r pgid <<EOF
$(ps -p $! -o pgid=)
EOF
echo $$ $! $pgid
sleep 10
kill -HUP -- -$!
#kill -HUP -- -${pgid} # use in script
}