Terkadang, mengirimkan SIGTERM ke suatu proses akan menyebabkannya mengirim SIGTERM ke semua proses anaknya. Namun, terkadang ini tidak berhasil.
Apakah ada perintah atau utilitas yang akan memungkinkan saya untuk membunuh suatu proses dan semua proses anaknya pada saat yang sama? Saya biasanya menggunakan secara manual mengumpulkan semua pids menjadi satu perintah kill, tapi rasanya bodoh.
Pertanyaan SO ini menanyakan bagaimana melakukan ini dengan perl, tetapi apa pun yang menyelesaikan pekerjaan akan menjadi hebat.
pkill -9
lebih kuat daripadapkill
, untuk alasan apa pun.Jawaban:
Ini pertanyaan SO mencakup ini.
sumber
Dengan asumsi bahwa proses berbagi pengenal sesi (yang seharusnya mereka lakukan kecuali jika mereka secara eksplisit disebut setsid (), Anda dapat membunuh mereka dengan sesi menggunakan pkill:
Jika dari terminal lain saya lakukan:
Kemudian semuanya mati dalam satu gerakan.
Anda juga dapat membunuh dengan proses kelompok, meskipun ini cenderung lebih bermanfaat bagi banyak anak yang semuanya satu tingkat di bawah orang tua, bukan rantai proses terkait.
sumber
Biasanya, klien yang merespons harus menerima sigterm dan mematikannya sendiri, sehingga menghentikan semua proses anak yang bercabang dua. Jika, di sisi lain, klien tidak merespons, sinyal terminasi normal mungkin tidak akan membangkitkan respons.
Jadi Anda kemudian melanjutkan untuk mengirim SIGKILL, yang memberitahu sistem itu sendiri untuk Membuat Proses Berhenti, Sekarang - yang dapat dilakukan sebagian besar kali, kecuali ketika prosesnya dalam keadaan tidur yang tidak dapat terputus, seperti menunggu beberapa I / O masukan atau serupa.
Dalam hal ini, bahkan SIGKILL pada akhirnya tidak akan melakukan apa pun pada prosesnya; proses anak mungkin akan mengalami keterbelakangan serupa.
Ada kasus perbatasan di mana proses induk mungkin berakhir dengan baik, tetapi proses anak tidak dapat dibunuh. Maka Anda akan berakhir dengan proses zombie yang tidak bisa dibersihkan karena ayahnya sudah tiada, tetapi tidak menanggapi apa pun. Satu-satunya cara untuk menghilangkannya adalah reboot; dalam banyak kasus, mereka tidak berbahaya, karena satu-satunya hal yang mereka lakukan adalah mengambil PID sementara soket apa pun yang mereka coba gunakan sudah layu.
sumber
Jika saya ingin mematikan pohon proses Firefox, apakah mungkin membunuhnya dengan perintah di atas "pkill -9 -s firefox"
sumber