Ketika saya mencoba menghentikan sesuatu, saya menggunakan ^C
dan terkadang ^D
di terminal.
Apa perbedaan keduanya? Mengapa beberapa program tidak merespons ^C
, tetapi ^D
. Mengapa Terminal.app hanya berhenti ketika saya gunakan ^D
?
Ketika saya mencoba menghentikan sesuatu, saya menggunakan ^C
dan terkadang ^D
di terminal.
Apa perbedaan keduanya? Mengapa beberapa program tidak merespons ^C
, tetapi ^D
. Mengapa Terminal.app hanya berhenti ketika saya gunakan ^D
?
Jawaban:
CtrlCmemberitahu terminal untuk mengirim SIGINT
ke proses latar depan saat ini, yang secara default diterjemahkan menjadi mengakhiri aplikasi. CtrlDmemberitahu terminal bahwa ia harus mendaftarkan EOF pada input standar, yang mem-bash interpretasikan sebagai keinginan untuk keluar.
Ctrl+ D( ^D
) berarti akhir file . Ini hanya bekerja pada awal baris (saya menyederhanakan sedikit), dan tidak berpengaruh jika program tidak membaca input dari terminal. Dalam percobaan Anda, beri ^D
tahu shell bahwa Anda tidak akan mengetik lagi perintah, jadi itu keluar; kemudian terminal keluar karena subprogramnya telah berakhir.
Ctrl+ C( ^C
) berarti "interupsi", yaitu, hentikan apa yang Anda lakukan. Secara teknis, menekan ^C
mengirim sinyal INT , yang secara default menghentikan aplikasi, tetapi yang dalam banyak program berarti kembali ke tingkat atas (misalnya, dalam sebuah shell, berhenti mengetikkan baris perintah dan kembali ke prompt yang asli).
Jika suatu program tidak merespons ^C
, Anda dapat mencoba Ctrl+ \( ^\
). Ini mengirimkan sinyal QUIT , yang secara default menghentikan aplikasi, dan yang tidak begitu banyak menyadap program.
Kunci lain yang mengirim sinyal adalah Ctrl+ Z( ^Z
). Ini mengirimkan sinyal TSTP , yang menghentikan sementara program yang berjalan di latar depan. (TSTP adalah kependekan dari "terminal stop"; ini mirip dengan STOP tetapi TSTP dapat diabaikan sedangkan STOP tidak bisa.) Dari shell, Anda dapat melanjutkan eksekusi program dengan fg
perintah (melanjutkan di latar depan) atau bg
perintah (melanjutkan di Latar Belakang).
Semua kunci ini dapat diubah dengan stty
perintah. Beberapa program, khususnya program layar penuh yang memiliki ikatan utama, menonaktifkannya.
KeyboardInterrupt
? Itu berhenti dengan ctrl + d (jika di awal baris), dan dengan ctrl + \.
Menambahkan ke 2 jawaban yang sangat bagus di atas, berikut ini sebuah contoh:
Jika Anda mengetikkan python
shell, ia akan membawa Anda ke prompt >>> python.
Sekarang, jika Anda menekan Ctrl+C
, itu akan mengatakan KeyboardInterrupt
dan tetap di >>>.
Jika Anda masuk ke dalam for loop, misalnya dengan mengetiknya for x in (text):
menunggu Anda untuk mengetik lebih lanjut dengan menunjukkan ... prompt, jika Anda menekan Ctrl+C
sekarang, itu akan keluar dari pernyataan for dan kembali ke >> >> prompt
Jika Anda menekan Ctrl+D
kapan saja, apakah dalam >>> atau ... itu akan keluar dari python prompt dan kembali ke shell asli.
Demikian pula, jika ssh'ed ke komputer lain, a Ctrl+C
akan mengakhiri perintah yang ada, Ctrl+D
akan melakukan itu dan keluar dari mesin juga. (Juga, Delete
kuncinya sama dengan melakukan a Ctrl+D
)