GNU/Linux >> Belajar Linux >  >> Linux

Mengapa proses anak masih hidup setelah proses induk dimatikan di Linux?

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
}

Linux
  1. Linux – Kapan Saya Tidak Harus Membunuh -9 Proses?

  2. Mengapa Proses Pgid Anak Bukan Pid Orang Tua?

  3. Mengapa Sigint Tidak Dipropagasi ke Proses Anak Saat Dikirim ke Proses Induknya?

  1. bunuh Contoh Perintah di Linux

  2. Bagaimana cara membuat proses anak mati setelah orang tua keluar?

  3. Proses anak menerima SIGINT orang tua

  1. Cara mematikan proses zombie di Linux

  2. Mengapa saya beralih dari Mac ke Linux

  3. Mengapa saya tidak bisa mematikan proses ini di Linux?