Ctrl+ Ctidak selalu berfungsi untuk mematikan proses saat ini (misalnya, jika proses itu sibuk dalam operasi jaringan tertentu). Dalam hal ini, Anda hanya melihat "^ C" dengan kursor Anda dan tidak bisa melakukan banyak hal lain.
Apa cara termudah untuk memaksa proses mati sekarang tanpa kehilangan terminal saya?
Ringkasan jawaban:
Biasanya, Anda dapat Ctrl+ Zuntuk meletakkan proses ke sleep, dan kemudian lakukan kill -9 _process-pid_
, di mana Anda menemukan pid proses dengan ps dan alat lainnya. Di Bash (dan mungkin shell lain), Anda dapat melakukan kill -9 %1
(atau '% N' secara umum) yang lebih mudah. Jika Ctrl+ Ztidak berfungsi, Anda harus membuka terminal lain dan mematikannya dari sana.
screen
akan menjadi solusi yang memungkinkan, Memungkinkan Anda untuk membuat jendela baru dankill
proses dari sana.Jawaban:
Untuk memahami masalah mengapa Ctrl+ Ctidak berhasil, sangat membantu untuk memahami apa yang terjadi ketika Anda menekannya:
Kebanyakan shell mengikat Ctrl+ Cuntuk "mengirim sinyal SIGINT ke program yang saat ini berjalan di latar depan". Anda dapat membaca tentang berbagai sinyal melalui sinyal manusia :
Program dapat mengabaikan sinyal itu, karena mereka dapat mengabaikan SIGTSTP juga:
(Itulah yang dilakukan sebagian besar shell ketika Anda menekan Ctrl+ Z, itulah sebabnya tidak dijamin berfungsi.)
Ada beberapa sinyal yang tidak dapat diabaikan oleh proses: SIGKILL , SIGSTOP dan beberapa lainnya. Anda dapat mengirim sinyal ini melalui perintah kill . Jadi, untuk membunuh proses hang / zombieying Anda, cari saja ID proses (PID). Misalnya, gunakan
pgrep
ataups
lalukill
:sumber
Z
keadaan zombie ( ). Dalam hal ini, ia tidak dapat menangani sinyal lagi.)Jika Ctrl+ C(SIGINT) tidak berfungsi, coba Ctrl+ \(SIGQUIT). Kemudian coba Ctrl+ Z(SIGTSTP). Jika itu mengembalikan Anda ke prompt shell, lakukan
kill
pada ID proses. (Ini default untuk sinyal SIGTERM, yang dapat Anda tentukan dengankill -TERM
. Dalam beberapa shell, Anda mungkin dapat menggunakan%1
untuk merujuk ke PID.) Jika itu tidak berhasil, pergi ke terminal lain atau sesi SSH dan lakukankill
ataukill -TERM
pada ID proses. Hanya sebagai upaya terakhir yang harus Anda lakukankill -KILL
, aliaskill -9
, karena tidak memberikan proses peluang untuk membatalkan dengan baik, menyinkronkan file yang terbuka, menghapus file sementara, menutup koneksi jaringan, dll.sumber
Tekan Ctrl-Z untuk menunda program dan meletakkannya di latar belakang :
(Kembalikan ke latar depan menggunakan lagi
fg
)Kemudian, Anda bisa
kill
ataukill -9
itu, diberi ID prosesnya (Anda mendapatkannya darips a
).sumber
kill $!
, seperti$!
variabel khusus yang berisi pid dari program berlatar belakang terakhir.bg
sekali sebelum variabel mendapatkan nilai yang diberikan.bg
tepat setelah Ctrl + Z itu hanya ditangguhkan.ps
output (ataukillall
) cukup berisiko jika Anda memiliki banyak proses dengan nama yang sama berjalan.ps -e -o pid,command
akan memberikan pid + argumen penuh, bukan hanya nama program, tetapi sekali lagi mungkin tidak cukup untuk melakukan diskriminasi. Sebaliknya$!
adalah hit yang pasti.ps a
pada sistem saya:27721 s000 T 0:00.09 top
Berapa banyakT
contoh yang ditangguhkan ( , saya pikir) dari perintah yang sama (top
) yang Anda jalankan di tty yang sama (s000
)?Lihat tautan ini juga.
Ctrl+ Z: menghentikan sementara suatu proses.
Ctrl+ C: dengan sopan minta proses untuk mematikan sekarang.
Ctrl+ \: tanpa ampun membunuh proses yang saat ini ada di latar depan
sumber
"ctrl"
+"\"
tidak bekerja untuk sayaBiasanya, Anda masih bisa menghentikan proses ( Ctrl+ Z) dan kemudian menggunakannya
kill -9
. Sebabkill -9
, Anda perlu proses PID terlebih dahulu. Untuk pekerjaan latar belakang,kill -9 %1
cara termudah untuk melakukannya - jika Anda tidak yakin berapa jumlah pekerjaan latar yang ingin Anda bunuh, jalankanjobs
.Atau, Anda dapat menemukan ID proses dengan
Maka Anda bisa lari
sumber
Solusi yang lebih sederhana untuk Bash (dan cangkang lainnya?) Adalah dengan melakukan:
di mana '% 1' mengacu pada nomor pekerjaan yang terbunuh. Mungkin '% 2' (atau yang lain) jika Anda sudah memiliki pekerjaan lain. Anda dapat melihat nomor pekerjaan itu saat Anda menekan Ctrl-z:
Perhatikan bahwa 'kill' adalah versi shell dari kill, bukan / bin / kill.
sumber
1) Jika Anda berada di konsol dan dalam mode multi-pengguna, Anda dapat menekan CTRL-ALT-Fn dan masuk di layar lain, gunakan
ps -ef | grep <myprocessname>
ataupidof <myprocessname>
kemudian bunuh -9 proses dengan nomor ID.2) Jika Anda terhubung dari jarak jauh, lakukan hal yang sama melalui sesi terminal lain.
Anda juga bisa membuat hidup sedikit lebih mudah dengan menginstal htop , yang merupakan versi top yang lebih fleksibel yang memungkinkan Anda untuk secara selektif mematikan proses yang sedang berjalan. Sebagian besar distro memiliki repo.
3) jika Anda hanya terjebak dalam sesi ssh hung (ke sistem lain, misalnya), coba tekan tilde (~), yang merupakan tombol pelarian, dan kemudian tekan CTRL-Z untuk kembali ke sesi host, maka Anda dapat membunuh proses ssh yang macet atau menunggu sampai batas waktu habis, yang sebagian besar masih dilakukan setelah periode tidak aktif.
sumber
Jika Anda menggunakan tmux atau layar, dan tidak satu pun di atas berfungsi, Anda masih bisa mematikan panel
<prefix> x
, maka prosesnya juga mati.sumber
Mungkin ada jebakan yang diatur dengan SIGINT (2) di / etc / profile Anda. Jika demikian, hapus. Logout dan masuk kembali dan Anda harus baik.
sumber