Saya mencoba untuk meningkatkan keterampilan baris perintah saya dan saya telah mengalami masalah di mana saya tidak dapat membunuh proses. Saya mengetik di kill 2200
mana 2200 adalah PID saya dan prosesnya tidak terbunuh. Setelah beberapa menit menunggu masih dalam top
dan ps aux
. Saya bahkan sudah mencoba mengetiknya dengan sudo - tidak ada hasil.
Adakah ide mengapa bisa seperti itu?
SUNTING
Saya telah menemukan ketergantungan 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
command-line
process
Patryk
sumber
sumber
top
(sebagaimana tercantum dalam edit). Saya hanya ingin mencoba meletakkan program untuk bekerja ke latar belakang dan kemudian membawanya kembali.fg
ataubg
untuk proses tersebut)Jawaban:
Proses dapat mengabaikan beberapa sinyal. Jika Anda mengirim SIGKILL, ia tidak akan dapat mengabaikannya (dan tidak menangkapnya untuk melakukan pembersihan). Mencoba:
Pelajari lebih lanjut dengan membaca halaman manual:
sumber
kill -9
itu tidak berhasil dan prosesnya masih berkeliaran?Jika
kill
dipanggil tanpa parameter apa pun, ia mengirimkan nomor sinyal 15 (SIGTERM
). Sinyal ini dapat diabaikan oleh proses. Sinyal ini memberi tahu proses untuk membersihkan barang-barangnya dan kemudian mengakhiri dengan benar 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. Itu cara yang jahat.Satu kata
kill -9 <pid>
selalu berhasil. Itu salah kaprah . Ada situasi di mana bahkankill -9
tidak mematikan proses. Misalnya ketika suatu proses memiliki statusD
(tidur tidak terputus). Suatu proses masuk ke kondisi ini setiap kali menunggu I / O (biasanya tidak terlalu lama). Jadi, jika suatu proses menunggu I / O (pada harddisk yang rusak misalnya) dan itu tidak diprogram dengan benar (dengan batas waktu), maka Anda tidak bisa mematikan proses itu . Apa pun yang Anda lakukan. Anda hanya dapat mencoba membuat file dapat diakses sehingga proses berlanjut.sumber
Meskipun namanya kill tidak benar-benar membunuh proses, ia mengirimkan sinyal ke sana. Dari halaman manual:
kill - send a signal to a process
Sinyal default yang dikirim oleh
kill [pid]
adalah SIGTERM yang biasanya tetapi tidak selalu meminta proses untuk mengakhiri. Sangat mungkin untuk menulis program yang memainkan nada senang ketika Anda mengirim sinyal SIGTERM ke sana, tetapi tidak disarankan.Sinyal umum lainnya adalah SIGHUP yang sering digunakan untuk meminta program membaca ulang file konfigurasinya.
Jika Anda benar-benar ingin mematikan suatu program, Anda harus menggunakan sinyal SIGKILL dengan melakukan
kill -9 [pid]
.sumber
Sepertinya Anda mungkin menangguhkan suatu proses (mungkin dengan menekan Ctrl-Z di terminal). Dalam keadaan ini, proses Anda tidak akan menanggapi SIGTERM karena dibekukan. Menjalankan 'fg' melelehkan prosesnya, sehingga dapat mengambil sinyal dan mengakhiri sendiri. Itu bisa menjelaskan mengapa 'fg' muncul untuk memperbarui daftar proses.
sumber
Dari dalam C ++, saya mengeksekusi:
Dan di terminal linux (Ubuntu),
Outputnya adalah:
Tampaknya, itu (4024) masih bertahan. 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 dapat membantu seseorang di luar sana. Tepuk tangan!
sumber
Anda juga dapat menggunakan
kill -l
untuk menampilkan sinyal yang didukung oleh arsitektur Anda, dan mempelajari lebih lanjut tentang sinyal yang mungkin ingin Anda gunakan untuk mengirim sinyal dengan benar.Catatan: seperti yang mungkin disebutkan orang lain, penggunaan
kill -9 {PID}
tidak disarankan kecuali proses zombie-nya. setelah suatu proses menerima SIGKILL akan segera mati tanpa pembersihan atau prosedur lain yang sesuai.sumber
Ini adalah apa yang saya gunakan untuk menjalankan localhost pil pada port 80 (Oleh angular cli) Dapatkan menjalankan aplikasi info pada port 80
dimana
3348
pid dari proses yang berjalansumber