Seperti dikatakan, itu mengirimkan sinyal ke semua anggota grup proses pemanggil.
Kelompok proses digunakan untuk menerapkan kontrol pekerjaan di shell (mereka dapat digunakan untuk hal-hal lain, tetapi kontrol kerja shell interaktif adalah alasan utama keberadaan mereka).
Anda akan melihat bahwa ketika Anda mengetik Ctrl-C, semua proses pekerjaan saat ini terbunuh, tidak hanya yang memulai. Juga, itu tidak mematikan pekerjaan latar belakang.
Itu dicapai dengan kelompok proses. Pekerjaan adalah sekelompok proses yang dimulai oleh shell yang shell dapat letakkan di latar belakang atau latar depan (ditetapkan sebagai grup proses latar depan terminal atau tidak), dan membunuh secara keseluruhan.
Anda dapat mengetahui tentang id grup proses dan id sesi dengan ps -j
( j
untuk Jkontrol ob).
Untuk membunuh grup proses PGID $x
, Anda lakukan:
kill -- "-$x"
kill 0
membunuh grup proses pemanggil.
Perhatikan bahwa jika Anda melakukannya /bin/kill 0
:, shell akan memulai pekerjaan baru untuk mengeksekusi kill
perintah itu, jadi kill
hanya akan membunuh dirinya sendiri.
kill
biasanya shell builtin, jadi kill
akan membunuh kelompok proses shell.
Namun, ketika shell bersifat interaktif, itu adalah proses yang mengelola grup proses, jadi biasanya tidak ada proses lain dalam grup proses shell. Semua proses yang dimulai oleh shell, berada di grup proses lain:
$ sleep 1000 &
[1] 22746
$ ps -j
PID PGID SID TTY TIME CMD
22735 22735 22735 pts/23 00:00:00 zsh
22746 22746 22735 pts/23 00:00:00 sleep
22749 22749 22735 pts/23 00:00:00 ps
Di atas, sleep
dan ps
berada dalam dua grup proses yang berbeda, satu di latar belakang, satu di latar depan dan mereka berbeda dari grup proses shell.
Anda bisa melakukannya:
(man kill & sleep 1; ps -j; kill 0)
Shell interaktif akan memulai grup proses baru untuk subkulit itu, dan baik subkulit dan man (dan perintah lainnya dimulai oleh man seperti pager Anda, groff ...) akan berada di grup proses yang sama, jadi kill 0
akan bekerja di sana. (di sleep
atas adalah memberi waktu yang cukup bagi pager untuk memulai sehingga kita dapat melihatnya di ps -j
output sebelum kita membunuhnya).
SIGTERM
ke proses, yang telah dilakukan. Theman
perintah telah memilih untuk mengabaikannya.