Saya mendapatkan banyak pesan campuran dari orang-orang, dan bertanya-tanya apakah sebenarnya tidak ada banyak perbedaan dalam apa yang Anda gunakan.
kill 'x'
killall 'x'
kill -9 'x'
Ini adalah beberapa opsi yang telah saya perintahkan untuk digunakan sejauh ini, tetapi beberapa orang mengatakan bahwa membunuh -9 hanya berlebihan, membunuh dengan sendirinya tidak bekerja, dll.
Apakah ada yang punya saran yang harus digunakan dalam kasus paling standar hanya mengakhiri proses (dan dengan demikian keadaannya juga)?
Saya sedang mencari apa yang harus digunakan ketika Anda ingin menghentikan pelaksanaan proses Anda sehingga Anda dapat menjalankan yang baru, baru dari awal
SIGKILL
.kill -l
dan untuk menerjemahkan nomor ke nama sinyal yang sesuai misalnyakill -l 9
akan kembaliKILL
.Jawaban:
Ada sejumlah sinyal yang disposisi defaultnya adalah untuk menghentikan proses. Sinyal terminasi terakhir adalah SIGKILL karena tidak dapat ditangani dan proses tidak memiliki pilihan selain mati. Namun ini juga berarti bahwa jika Anda mengirimnya, proses tersebut kehilangan kesempatan untuk membersihkan. Oleh karena itu, perilaku yang baik perlu mengirim sinyal seperti SIGTERM yang dapat ditangani terlebih dahulu dan hanya jika prosesnya tidak keluar setelah beberapa waktu mengirimkannya SIGKILL.
Perhatikan bahwa SIGINT dan SIGQUIT bukan kandidat yang baik untuk penghentian proses sewenang-wenang. Karena fakta bahwa mereka dapat dihasilkan dari keyboard terminal, banyak aplikasi menggunakannya untuk tujuan khusus. Misalnya, interpreter python menggunakan SIGINT untuk menghasilkan
KeyboardInterrupt
pengecualian (juga dalam sesi python interaktif di mana ia hanya kembali ke prompt) dan JVM menggunakan SIGQUIT untuk membuang jejak stack. SIGINT dan SIGQUIT tetap efektif untuk sebagian besar utilitas baris perintah standar sepertifind
ataucat
.Selama shutdown sistem, sebagian besar sistem UNIX dan Linux mengirim SIGTERM ke semua proses, diikuti oleh 5 detik menunggu, diikuti oleh SIGKILL. Ini adalah cara yang disarankan untuk mematikan proses arbitrer dengan aman.
Perhatikan juga bahwa bahkan SIGKILL mungkin tidak menghentikan proses yang macet dalam menunggu tanpa gangguan sampai proses bangun.
sumber
kill -SIGTERM $pid; sleep 5; kill -SIGKILL $pid;
rekomendasi?SIGHUP
berasal dari hari ketika saluran dial-up umum digunakan. Sinyal itu dikirim untuk menunjukkan bahwa saluran terputus. Kemudian, ketika itu kurang umumSIGHUP
kadang-kadang digunakan oleh daemon untuk membaca kembali file konfigurasi tanpa memulai kembali proses. Di zaman modernSIGHUP
ini jarang digunakan. Banyak daemon akan memiliki cara sendiri untuk menginisialisasi ulang (yaitu,apachectl graceful
ataurndc reconfig
. Untuk hal-hal yang tidak boleh Anda gunakan[init.d|smf|upstart|launchd]
kontrol jika memungkinkan.Anda harus mulai dengan yang paling lembut dan naik dari sana. Ini berarti, SIGINT, SIGTERM, SIGQUIT, SIGKILL. Meskipun kebanyakan orang melewatkan SIGINT dan SIGQUIT.
sumber