Adakah yang bisa memberi tahu saya perbedaan antara ctrl+ zdan ctrl+ c?
Ketika saya berada di terminal, kedua kombinasi menghentikan proses saat ini, tetapi apa sebenarnya perbedaan antara keduanya?
Adakah yang bisa memberi tahu saya perbedaan antara ctrl+ zdan ctrl+ c?
Ketika saya berada di terminal, kedua kombinasi menghentikan proses saat ini, tetapi apa sebenarnya perbedaan antara keduanya?
Jawaban:
Jika kita membiarkan case edge ke satu sisi, perbedaannya sederhana. Control+ Cmembatalkan aplikasi segera sementara Control+ Zmendorongnya ke latar belakang, ditangguhkan.
Shell mengirim sinyal berbeda ke aplikasi yang mendasarinya pada kombinasi ini:
Control+ C(karakter kontrol intr
) mengirimkan SIGINT yang akan mengganggu aplikasi. Biasanya menyebabkannya dibatalkan, tetapi ini tergantung pada aplikasi untuk memutuskan.
Control+ Z(karakter kontrol susp
) mengirim SIGTSTP ke aplikasi latar depan, secara efektif meletakkannya di latar belakang, ditangguhkan. Ini berguna jika Anda perlu keluar dari sesuatu seperti editor untuk pergi dan mengambil beberapa data yang Anda butuhkan. Anda dapat kembali ke aplikasi dengan menjalankan fg
(atau di %x
mana x
nomor pekerjaan seperti yang ditunjukkan pada jobs
).
Kita dapat menguji ini dengan menjalankan nano TEST
, lalu menekan Control+ Zdan kemudian menjalankan ps aux | grep TEST
. Ini akan menunjukkan kepada kita nano
proses masih berjalan:
oli 3278 0.0 0.0 14492 3160 pts/4 T 13:59 0:00 nano TEST
Lebih lanjut, kita dapat melihat (dari T itu, yang ada di kolom status) bahwa proses telah dihentikan . Jadi masih hidup, tapi tidak berjalan ... Itu bisa dilanjutkan.
Beberapa aplikasi akan macet jika mereka memiliki proses eksternal yang sedang berlangsung (seperti permintaan web) yang mungkin habis saat mereka tertidur.
bg
(bukan fg
) untuk membatalkan penangguhan aplikasi yang telah Ctrl + Z'ed tanpa memasukkannya kembali ke latar depan; secara efektif memberi Anda kontrol dari kedua shell yang memulai aplikasi dan aplikasi itu sendiri, seolah-olah Anda telah digunakan &
saat memulai aplikasi. Ini sering berguna ketika Anda lupa memulainya dengan &
:)
fg
lagi!
ctrl c
atau ctrl z
? Ini default ke SID (bash)?
Control+ Zmenunda proses ( SIGTSTP
) dan Control+ Cmemotong proses ( SIGINT
)
http://en.wikipedia.org/wiki/Control-Z
Pada sistem mirip Unix, Control + Z adalah pemetaan keyboard default paling umum untuk urutan kunci yang menunda proses
http://en.wikipedia.org/wiki/Control-C
Dalam sistem POSIX, urutan menyebabkan program aktif menerima sinyal SIGINT. Jika program tidak menentukan bagaimana menangani kondisi ini, itu dihentikan. Biasanya program yang menangani SIGINT masih akan berhenti sendiri, atau setidaknya menghentikan tugas yang berjalan di dalamnya
Ctrl+ Cdigunakan untuk membunuh proses dengan sinyal SIGINT
, dengan kata lain + adalah pembunuhan yang sopan .
Ctrl+ Z digunakan untuk menunda proses dengan mengirimkannya sinyal SIGTSTP
, yang seperti sinyal tidur, yang dapat dibatalkan dan proses dapat dilanjutkan kembali.
Namun ketika suatu proses ditangguhkan, kita dapat melanjutkannya kembali dengan fg
(melanjutkan di latar depan) dan bg
(melanjutkan di latar belakang), tetapi saya tidak dapat melanjutkan proses yang terbunuh, itu adalah perbedaan antara menggunakan Ctrl+ C& Ctrl+ Z.
Bagaimana kita bisa melihat proses yang ditangguhkan?
The jobs
perintah memberikan output seperti ini:
[1]- Stopped cat
[2]+ Stopped vi
Bagaimana cara membunuh proses yang ditangguhkan di latar belakang?
Dengan menggunakan kill
perintah:
kill %n
di mana n
nomor ditampilkan oleh jobs
perintah. Jadi jika saya ingin membunuh kucing: kill %1
.
Untuk membuatnya lebih sederhana:
CTRL-C meminta agar program dibatalkan .
CTRL-Z Memaksa program untuk menangguhkan dan pergi ke latar belakang .
Ini memungkinkan Anda untuk melanjutkannya nanti dengan perintah fg
. Tugas latar belakang yang tersisa terbunuh saat Anda keluar dari shell login.
Ini akan membantu
Ctrl+ Zdigunakan untuk menangguhkan proses dengan mengirimkannya sinyal SIGSTOP, yang tidak dapat dicegat oleh program. Sedangkan Ctrl+ Cdigunakan untuk mematikan proses dengan sinyal SIGINT, dan dapat dicegat oleh suatu program sehingga dapat membersihkan dirinya sendiri sebelum keluar, atau tidak keluar sama sekali.
SIGTSTP
, yang dapat ditangkap oleh program. Ada empat sinyal yang berbeda, yang dapat menangguhkan program SIGSTOP
, SIGTSTP
, SIGTTIN
, SIGTTOU
. Dari mereka hanya SIGSTOP
tidak bisa diblokir. Tiga lainnya digunakan oleh terminal untuk menghentikan proses dalam kondisi yang berbeda.
ketika Anda menekan ctrl+ c, itu berarti Anda mengirim SIGINT ke proses Anda. seperti Anda ketik perintah ini: kill -SIGINT <your_pid>
. Ini akan membunuh Anda proses Anda. Itu sebabnya Anda tidak dapat melihatnya saat mengeluarkan perintah ps .
Ketika Anda menekan ctrl+ z, itu berarti Anda mengirim SIGSTOP ke proses Anda. seperti Anda ketik perintah ini: kill -SIGKSTOP <your_pid>
. Ini akan menghentikan proses Anda, tetapi prosesnya masih hidup. Jadi Anda dapat mengaktifkan kembali proses Anda dengan mengirimkan SIGCONT ke proses Anda.