Mengapa saya tidak menggunakan 'kill -9' / SIGKILL

14

Posting pertanyaan ini karena saya terkejut tidak menemukannya langsung dijawab; permintaan maaf jika ini adalah duplikat - saya memang melihat!

Saya pernah mendengar itu kill -9atau kill -SIGKILLburuk, tetapi saya tidak mengerti mengapa. Jika saya tidak seharusnya kill -9apa yang harus saya lakukan untuk membunuh suatu proses?

dimo414
sumber
2
Premis dari pertanyaan itu salah. SIGKILL hanyalah alat. Dianjurkan dalam beberapa situasi dan tidak direkomendasikan dalam situasi lain (seperti semua alat lainnya).
kubanczyk
@ Kubanczyk yakin, tapi itu alat yang sering salah diaplikasikan, dan digunakan tanpa memahami tujuannya. Saya telah melihat banyak utas di mana A mengatakan " Hanya kill -9itu ", OP mengatakan " bagus, itu berhasil! Saya akan mengingatnya mulai sekarang! ", Dan B masuk untuk memperingatkan " tunggu kill -9itu berbahaya! " Hanya setelah fakta.
dimo414

Jawaban:

15

SIGKILLmenarik karpet keluar dari proses Anda berjalan, segera menghentikannya. Untuk program yang sangat sederhana ini tidak masalah; namun dalam praktiknya hanya ada sedikit program "sederhana".

Di balik selimut, bahkan program yang tampak sepele melakukan segala macam pekerjaan transaksional yang perlu mereka bersihkan sebelum diakhiri (pikirkan finallyblok di Jawa dan bahasa pemrograman lainnya), seperti menutup pegangan sumber daya, menghapus file sementara, dan menyiram data dari memori ke disk. Anda tidak dapat mengantisipasi kapan suatu program melakukan hal seperti ini.

Jika Anda beruntung, Anda tidak akan melihat ada yang salah jika mengirim SIGKILL, tetapi Anda tidak bisa beruntung selamanya, dan Anda mungkin tidak tahu ada yang salah sampai sudah terlambat untuk memulihkan apa yang hilang.

Anda seharusnya hampir tidak pernah perlu mengirim SIGKILL, dan Anda harus yakin telah kehabisan alternatif Anda sebelum melakukannya. Dalam banyak kasus, me-reboot (yang pada akhirnya akan mengirim SIGKILLke program yang nakal) lebih aman daripada mengirim SIGKILLsendiri secara manual . Saya mungkin dapat mengandalkan di satu sisi berapa kali saya perlu mengirim SIGKILL(dan kemungkinan semua buatan saya sendiri).

Secara umum Anda dapat menggunakan Ctrl+ C(yang mengirimkan proses foreground a SIGINT) atau SIGTERM(seperti dalam "terminate") untuk menginstruksikan proses untuk menghentikan apa yang dilakukannya dan keluar.

Beberapa bacaan lebih lanjut:

dimo414
sumber