Secara historis ada tiga sinyal yang terikat dengan penekanan tombol ini
- SIGINT (Intettput) biasanya Ctrl+ CatauDel
- SIGQUIT - Quit - Biasanya terikat ke Ctrl+\
- SIGSUSP Suspend - Biasanya terikat ke Ctrl+Z
Pada beberapa rasa * nix ada sinyal lain juga terikat, Anda dapat memeriksa binding keyboard menggunakan perintah
stty -a
Di sistem saya, OS / X, ini menghasilkan output berikut
speed 9600 baud; 65 rows; 213 columns;
lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl
-echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
-extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8
-ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
-dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
stop = ^S; susp = ^Z; time = 0; werase = ^W;
Harap perhatikan kill dalam contoh ini bukan sinyal KILL, ini berkaitan dengan membersihkan buffer input saat ini.
Anda mungkin lebih berhasil dengan menghentikan proses menggunakan SIGQUIT, tetapi ini mungkin tidak benar karena proses mungkin menangkap sinyal dan mengabaikannya.
Tidak ada konsep daftar proses "terganggu" karena proses telah menangkap dan mengabaikan interupsi atau telah keluar. Anda bisa mendapatkan daftar proses yang ditangguhkan dengan mengetik pekerjaan
stty -ixon
sehingga mereka dilewati. Saya pikir mereka akan berubah<undef>
.Banyak jawaban yang benar, tetapi tidak ada yang lengkap.
Untuk mengakhiri dengan prasangka ekstrem dan tanpa mengizinkan proses untuk menghentikan Anda menggunakan SIGKILL, yang tidak terikat pada tombol apa pun secara default. Sebagai gantinya, Anda biasanya mengirimnya menggunakan
kill (1)
perintah dan menentukan sinyal untuk dikirim seperti padaatau mnemonically
Sinyal ini ditangani langsung oleh OS dan program tidak dapat mengesampingkan perilaku default.
Jika shell Anda mendukung kontrol pekerjaan, itu juga dapat mendukung versi
kill
bawaan yang mendukung identifikasi pekerjaan menggunakan%
karakter seperti pada jawaban catwalk .fg
terus mengendalikan terminal ataubg
membuatnya beroperasi tanpa mengendalikan terminal (tetapi, secara default, masih mengirimkan hasilnya di sana).sumber
untuk melihat daftar proses latar belakang:
jobs
untuk membunuh:
kill %1
(gantikan 1 dengan id pekerjaan yang sesuai seperti dalamjobs
output)sumber
Ctrl-C mengirimkan SIGINT, yang secara default menyebabkan proses berakhir, tetapi dapat terjebak (dalam
\bin sh
, menggunakantrap
).SIGKILL adalah sinyal mematikan yang tidak bisa disangkal.
Sunting Ketiga kalinya, saya pikir ini benar: Saya sudah memeriksa semuanya terhadap dokumen. Kita lihat saja nanti.
sumber
Ini tidak jelas bagi kebanyakan pemula terminal, tetapi jika masalah Anda hanya karena Anda berada dalam program interaktif dan Anda tidak dapat menemukan cara untuk keluar, cukup sering
q
keluar. Misalnya, ini adalah kunci untuk keluarless
, yang juga merupakan program yang Anda dapatkan ketika Anda melihatman
halaman, antara lain.Beberapa program memiliki cara pintas keyboard lain untuk keluar. Dalam
vim
atauvi
, gunakanESC:wq
. Diemacs
, gunakanControl-C Control-X
. Dalamnano
ataupico
, gunakanControl-X
. Perhatikan bahwa dalam contoh-contoh ini ada seluk-beluk, khususnya, tentang apakah pintasan itu menyimpan perubahan apa pun yang mungkin Anda buat pada file yang Anda edit.sumber
Banyak proses dapat menginstal interrupt handler untuk menangkap sinyal interupsi, tetapi yang tidak akan dibatalkan secara default.
Untuk memaksa proses berhenti, Anda dapat mengirim SIGQUIT (Ctrl- \).
sumber
Tampaknya jawaban lain adalah skenario yang mungkin, tetapi juga mungkin bahwa Anda menjalankan skrip yang tidak menangani anak-anaknya dengan benar. Saya baru-baru ini mencapai skenario yang sama, di mana membunuh skrip tidak akan membunuh proses anak skrip itu.
Secara umum, jika Anda masuk ke situasi ini, Anda harus meninjau semua proses yang sedang Anda jalankan. Anda harus meninjau halaman manual untuk ps. (
man ps
) Saya sangat suka menggunakanps auxwf
, yang menunjukkan hubungan orangtua / anak antara proses.pstree
melakukan sesuatu yang serupa. Anda harus menjalankan ini dari terminal lain sebelum mematikan proses untuk melihat seperti apa keadaan dalam situasi normal, dan mengidentifikasi proses anak.Jika Anda kemudian membunuh (dengan ^ C) proses utama itu, periksa output ps lagi untuk melihat apakah ada yang berubah. Jika proses anak masih ada, Anda dapat membunuh mereka dengan
kill
perintah. (lihatman kill
)sumber