Saya telah mencari jawaban dan sejauh ini tidak menemukan apa pun untuk menjawab pertanyaan saya. Saat ini saya masuk ke server Ubuntu saya dan setelah menjalankan proses saya tidak dapat menjalankan interupsi di atasnya. Ini stty-a saya:
user@Ubuntu1:~$ stty -a
speed 38400 baud; rows 93; columns 200; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0;
Saya tidak punya apa-apa di .bashrc saya yang mengubah interupsi.
Ini sama untuk semua pengguna termasuk root. Saya juga telah mencoba masuk dari lokasi yang berbeda menggunakan terminal yang berbeda dan setiap kali hasil yang sama ini muncul. Saya telah menggunakan ssh dan ssh -X untuk login.
Sunting: Secara lokal semua interupsi saya berfungsi dengan baik.
Pembaruan: Saya masih mencari jawaban. Teman saya memiliki masalah yang persis sama. Masalahnya tampaknya sangat ketika ketika masuk (dari PC, Mac, Linux) keyboard tidak mengambil kunci ini (meskipun dipetakan dengan benar).
sumber
Ctrl+V
dan memukulCtrl+C
? Sudahkah Anda mencoba membunuh prosesnyakill -s 2 <pid_of_process>
? Ini harus sama dengan mengirim sinyal SIGINT ke proses. Periksa pengaturan kunci emulator terminal Anda.Ctrl+C
saat menjalankan proses lain (misalnyacat
)? Mungkin itu proses yang mengabaikanCtrl+C
. Atau maksud Anda secara lokal di server Ubuntu, proses tertentu meresponsCtrl+C
, dalam hal apa, di terminal apa Anda mencoba? Bagaimana denganscreen
sesi?kill -s 2
(perhatikan-s 2
, ituSIGINT
(sinyal yang biasanya dikirim ketika Anda menekan Ctrl + C, default untukkill
adalahSIGTERM
)), maka perintah tersebut tidak mengabaikan interupsi. Sesuatu yang lain mengambilnya. Ketika Anda menjalankan ini secara lokal dan berfungsi, apakah Anda mengatakan itu bekerja menggunakan terminal yang sama di mesin klien untuk menjalankan sesuatu secara lokal, atau menjalankan emulator terminal secara lokal di mesin server? Saya ingin tahu apakah Anda menggunakan beberapa emulator yang mencoba meniru Ctrl + C dari dunia Windows ...Jawaban:
ctrl+ ctidak pernah mematikan program,
Bukan hanya itu yang dilakukannya.
Ada serangkaian sinyal yang ditentukan oleh standar POSIX, ini digunakan untuk mengontrol program yang sedang berjalan.
- http://man7.org/linux/man-pages/man7/signal.7.html
ctrl+ cmengirimkan sinyal
2
, "Interrupt from keyboard" ke program yang telah Anda jalankan dari terminal.Sepenuhnya tergantung pada program untuk menangani sinyal itu, ia dapat melakukan apa pun yang diinginkannya. Banyak penerjemah bahasa scripting yang dapat menangani hal ini secara default dengan mematikan skrip yang dipanggil dan keluar dengan anggun.
Jika Anda ingin sebuah program keluar, khususnya dari konteks otomatis, singal 15 direkomendasikan,
kill
program tersebut dapat digunakan untuk mengirim sinyal ke suatu proses oleh id (pid).Sejauh yang saya ketahui, program masih menerima sinyal ini sendiri, dan harus mengakhiri ASAP sebersih mungkin.
Jika program mengabaikan sinyal 15, Dan program tetap hidup (dan Anda tidak gagal mengirim sinyal karena kesalahan izin)
Sinyal 9, sejauh yang saya ketahui, ditafsirkan oleh kernel (task manager, dan antarmuka perangkat keras), Kernel tiba-tiba berhenti memproses program, dan tidak mengalokasikan / membebaskan semua sumber dayanya.
sumber
Inilah beberapa trik hardcore:
itu akan menangguhkan proses Anda dan itu akan mengembalikan Anda ID pekerjaan dari proses itu
Kemudian:
(ganti 1 dengan ID pekerjaan Anda).
Catatan: Persentase wajib !, jika tidak, Anda akan mematikan proses init Anda yang berarti Anda akan membunuh kernel dan seluruh sistem akan macet (jadi jangan beri ruang di antaranya :)
sumber
Ctrl + c tidak akan mematikan proses. itu hanya akan menghentikan proses berjalan saat ini di tengah. Untuk mematikan prosesnya, kita perlu menggunakan perintah "KILL"
sumber
kill
mengirim sinyal ke suatu proses. Tidak membunuhnya. Sinyal default yang dikirim bersamakill
adalahTERM
, sinyal yang dikirim bersamactrl+c
adalahSIGINT
.Saya berlari ke posting forum lama ini tentang masalah khusus ini. Tampaknya urutan interupsi default dapat ditimpa dalam file konfigurasi terpisah di suatu tempat.
Jika Anda hanya ingin membunuh proses ini secara eksternal, Anda dapat menggunakan kill hanya berhati-hatilah bahwa Anda harus meningkatkan pembunuhan seperti yang dijelaskan dalam artikel ini tentang proses pembunuhan , daripada hanya melompat ke kill -9 yang paling ekstrem.
Wikipedia adalah sumber yang bagus untuk program kill . Juga di sini adalah daftar sinyal Unix dan apa yang mereka lakukan.
sumber