Pertanyaan "Bunuh " tidak benar-benar membunuh prosesnya, mengapa?


Saya mencoba untuk meningkatkan keterampilan baris perintah saya dan saya mengalami masalah di mana saya tidak dapat membunuh proses. saya mengetik kill 2200 dimana 2200 adalah PID saya dan prosesnya tidak terbunuh. Setelah beberapa menit, tunggu masih di top dan ps aux. Saya bahkan mencoba mengetik dengan sudo - tidak ada hasil.

Ada gagasan mengapa akan seperti itu?


EDIT

Saya telah menemukan ketergantungan yang aneh, di mana fg memperbarui daftar proses:

x@xxx:/etc/grub.d$ ps
  PID TTY          TIME CMD
 1723 pts/0    00:00:00 bash
 2200 pts/0    00:00:00 top
 2202 pts/0    00:00:00 top
 2258 pts/0    00:00:00 ps
x@xxx:/etc/grub.d$ fg
top

x@xxx:/etc/grub.d$ ps
  PID TTY          TIME CMD
 1723 pts/0    00:00:00 bash
 2200 pts/0    00:00:00 top
 2620 pts/0    00:00:00 ps
x@xxx:/etc/grub.d$ fg
top

x@xxx:/etc/grub.d$ ps
  PID TTY          TIME CMD
 1723 pts/0    00:00:00 bash
 2621 pts/0    00:00:00 ps

100
2017-09-03 07:47


asal


Proses apa itu? Apakah Anda memeriksa apakah prosesnya mungkin mati? Dalam hal ini Anda harus membunuh proses induk. - htorque
Prosesnya top (seperti yang tercantum dalam pengeditan). Saya hanya ingin mencoba menempatkan program untuk bekerja ke latar belakang dan kemudian membawanya kembali. - Patryk
Jika Anda menangguhkan proses dengan CTRL-z, itu akan memblokir sebagian besar sinyal selama ditangguhkan (yaitu sampai Anda melakukan fg atau bg untuk proses) - nos


Jawaban:


Proses dapat mengabaikan beberapa sinyal. Jika Anda mengirim SIGKILL, itu tidak akan bisa mengabaikannya (dan tidak menangkapnya untuk melakukan pembersihan). Mencoba:

kill -9 {PID}

Pelajari lebih lanjut dengan membaca halaman manual:

man kill

149
2017-09-03 08:09



juga perhatikan bahwa di beberapa keadaan yang sangat spesifik, suatu proses bisa dalam keadaan zombie / mati yang bahkan SIGKILL tidak dapat membunuh prosesnya. Dalam hal ini, Anda harus menemukan proses induk dan membunuh proses induk. - Lie Ryan
Jika proses itu keluar dari jalur maka itu KILL DASH NINE! - scottl
Dan kadang-kadang tidak ada proses orang tua, dalam hal ini Anda hanya kacau. Satu-satunya cara untuk menghapus proses tersebut adalah dengan me-reboot mesin. - user606723
Anda juga bisa menggunakan pkill process, di mana proses adalah nama proses sebagai pengganti ID proses. - RobinJ
Nama perintah kill terus menyesatkan bagi banyak pengguna (termasuk saya di awal). Orang mengasumsikan bahwa ketika Anda mengatakan "bunuh X" ini berarti benar-benar membunuh X dan tidak melakukan sesuatu yang lain. Saya mengerti ini tidak akan mengubah apa pun tetapi saya berharap mereka telah memilih nama yang lebih rumit ... - rbaleksandar


Jika kill dipanggil tanpa parameter, ia mengirimkan sinyal nomor 15 (SIGTERM). Sinyal ini dapat diabaikan oleh proses. Sinyal ini memberitahukan proses untuk membersihkan barang-barangnya dan kemudian diakhiri dengan benar oleh dirinya sendiri. Itu cara yang bagus.

Anda juga dapat "mengirim" nomor sinyal 9 (SIGKILL) yang tidak dapat diabaikan oleh proses. Prosesnya bahkan tidak akan mengenalinya, karena kernel mengakhiri proses, bukan proses itu sendiri. Itulah cara jahatnya.

Satu kata kill -9 <pid> selalu berhasil. Itu a salah pengertian. Ada situasi di mana pun kill -9 tidak membunuh prosesnya. Misalnya ketika suatu proses memiliki negara D (tidur tidak terputus). Suatu proses datang ke keadaan ini setiap kali menunggu I / O (biasanya tidak terlalu lama). Jadi, jika proses menunggu I / O (pada harddisk cacat misalnya) dan tidak diprogram dengan benar (dengan batas waktu), maka Anda cukup tidak bisa membunuh prosesnya. Tidak peduli apa yang kamu lakukan. Anda hanya dapat mencoba membuat file dapat diakses sehingga prosesnya berlanjut.


31
2018-06-10 06:22



Ini sangat membantu, saya telah mengalami ini beberapa kali karena menggantung I / O akses pada disk jaringan dan saya bertanya-tanya mengapa saya tidak bisa membunuh proses yang membeku. Apakah ada lebih banyak dokumentasi tentang masalah khusus ini dan bagaimana cara mengatasinya? - Sheljohn


Meskipun namanya kill tidak benar-benar membunuh proses, ia mengirimkan sinyal ke dalamnya. Dari halaman manual:

kill - send a signal to a process

Sinyal default yang dikirim oleh kill [pid] aku s SIGTERM yang biasanya tetapi tidak perlu meminta proses untuk mengakhiri. Ini sangat mungkin untuk menulis program yang memainkan nada senang ketika Anda mengirim SIGTERM sinyal untuk itu, tetapi tidak disarankan.

Sinyal umum lainnya adalah SIGHUP yang sering digunakan untuk meminta program membaca kembali file konfigurasinya.

Jika Anda benar-benar ingin membunuh program yang perlu Anda gunakan SIGKILL sinyal dengan melakukan kill -9 [pid].


7
2017-09-06 11:51





Sepertinya Anda mungkin menunda suatu proses (mungkin dengan menekan Ctrl-Z di terminal). Dalam keadaan ini, proses Anda tidak akan merespons SIGTERM karena sudah beku. Menjalankan 'fg' akan mencairkan prosesnya, sehingga dapat menangkap sinyal dan mengakhiri dengan sendirinya. Itu bisa menjelaskan mengapa 'fg' muncul untuk memperbarui daftar proses.


2
2017-09-06 15:00



Jadi bagaimana menemukan terminal terlampir? - ruX


Dari dalam C ++, saya mengeksekusi:

kill(4024, SIGKILL);

Dan pada terminal linux (Ubuntu),

$ ps -ax | grep my_su

Outputnya adalah:

4024 pts/1    Z+     0:00 [my_subscriber] <defunct>

Tampaknya, itu (4024) masih hidup. Namun, segera setelah saya menghentikan proses induk yang disebut pernyataan "bunuh" di atas, 4024 tidak muncul lagi. Sekarang saya menilai proses "mati" tidak lebih dari garis yang ditampilkan dan memutuskan untuk mengabaikannya. Saya harap pengalaman saya bisa membantu seseorang di luar sana. Tepuk tangan!


0
2018-03-10 23:51