Bagaimana cara membatalkan perintah macet di server ubuntu?


Jawaban:


21

CTRL+Cakan mengirim SIGINTke aplikasi. Aplikasi dapat mengonfigurasi handler untuk sinyal ini atau mengabaikan sinyal. Secara default tidak ada handler dan SIGINTakan mematikan aplikasi.

Anda dapat menggunakan CTRL+\yang akan dikirim SIGQUIT. Ini juga akan menghasilkan dump inti jika batas inti tidak nol.

Anda dapat menunda proses dan kembali ke shell dengan CTRL+Z, ini akan menghentikan eksekusi proses dan kembali ke prompt shell. Prosesnya akan berada di memori dan akan tersedia sebagai pekerjaan di shell saat ini. Anda kemudian dapat menggunakan kill -SIGNAL %%atau kill -SIGNAL %<job_ID>mengirim sinyal ke pekerjaan itu. Misalnya untuk mematikan penggunaan pekerjaan terakhirkill -9 %%

Jika tidak ada yang berfungsi, Anda selalu dapat mengirim SIGTERM, sebagai upaya terakhir, SIGKILLyang akan menghentikan proses apa pun. Sinyal ini sebagai sinyal lain harus dikirim sebagai pengguna yang sama dengan proses yang Anda coba hentikan atau sebagai root. Untuk mengirim SIGKILLke proses, pertama menemukan proses dengan ps auxatau ps -edf, kemudian jalankan kill -SIGKILL <process_ID>, di mana <process_ID>adalah PIDkolom dalam psoutput.

Sinyal tidak dapat dikirim jika prosesnya dalam panggilan yang tidak terputus. Panggilan yang tidak terputus adalah fungsi kernel yang tidak dapat dihentikan dan biasanya terjadi karena driver yang buruk (mis. Driver yang tidak reentrant ). Suatu proses yang dalam tidur tidak terputus tidak dapat dihentikan sampai panggilan selesai atau server reboot.

Jika suatu proses menjadi zombie , itu tidak akan menggunakan sumber daya apa pun hanya mengambil ruang dalam tabel proses. Proses zombie tidak dapat menerima sinyal.

Daftar sinyal untuk arsitektur saat ini dapat ditemukan kill -l

Lihat halaman manual kill, psdan bash. Untuk melihat halaman manual gunakan sesuatu seperti:man ps


2

Jika Anda memiliki akses konsol penuh, Anda dapat melakukannya Alt- F1..12dan mendapatkan konsol baru.

Dari sana, Anda dapat melakukan proses daftar seperti berikut:

ps aux | grep <process-name>

Kemudian lakukan killpada ID proses:

kill -9 <pid>

Jika Anda tidak memiliki akses konsol penuh, cukup buka jendela terminal lain (mungkin melalui Putty atau serupa), dan lakukan proses di atas daftar dan membunuh langkah-langkah.


1

Ctrl C mengirimkan SIGINT ke proses Anda yang sedang berjalan. Jika Anda tidak ingin membuka konsol lain, Anda dapat mengirim SIGQUIT dengan Ctrl \. Ini akan mengatasi sebagian besar aplikasi yang digantung sehari-hari yang tidak dimiliki SIGINT.

Saya pribadi menginginkan cara untuk mengirim SIGKILL dengan jalan pintas, tetapi saya tidak mengetahui cara untuk melakukannya.


1

Saya menganggap pgrepdan pkilllebih mudah digunakan daripada killdengan ID proses yang eksplisit.

Selain itu, alih-alih memulai dengan sinyal 9 (SIGKILL), pertimbangkan untuk memulai dengan SIGTERM default (15). Ini akan memberi proses kesempatan untuk mengakhiri dengan anggun (jika bisa). pkill -15 thingdan pkill thingharus setara.

Begini cara kerjanya. Katakanlah ntpd digantung.

Apa saja prosesnya? (Anda dapat langsung beralih ke pkill jika Anda yakin tidak akan memiliki kesalahan positif).

$ pgrep -fl ntp
1034 /usr/sbin/ntpd
1037 /usr/sbin/ntpd

Bunuh prosesnya:

$ pkill ntpd

Gunakan pgreplagi untuk melihat apakah itu berhasil.

Jika tidak, akhirnya pindah ke pkill -9.


0

Anda akan beralih ke terminal baru, menemukan PID dari proses macet (menggunakan ps), lalu gunakan killuntuk mematikan proses. Saya pertama kali akan menggunakan kill (PID). Jika itu tidak berhasil, saya akan gunakan kill -9 (PID). Jika itu tidak menghentikan proses, mesin harus di-boot ulang.


0

Cntrl+ \bekerja untuk saya (di mana Cntrl+ catau ztidak bekerja)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.