Ctrl+ Zmenghentikan pekerjaan sedangkan Ctrl+ Cmembunuh pekerjaan.
Mengapa demikian? Bukankah sebaliknya lebih masuk akal?
z@z-lap:~$ sleep 100&
[1] 4458
z@z-lap:~$ sleep 200&
[2] 4459
z@z-lap:~$ jobs
[1]- Running sleep 100 &
[2]+ Running sleep 200 &
z@z-lap:~$ fg %1
sleep 100
^Z
[1]+ Stopped sleep 100
z@z-lap:~$ jobs
[1]+ Stopped sleep 100
[2]- Running sleep 200 &
z@z-lap:~$ fg %1
sleep 100
^C
z@z-lap:~$ jobs
[2]+ Running sleep 200 &
bash
shell
signals
job-control
neo0
sumber
sumber
Jawaban:
Saya pikir Anda mungkin bingung tentang notasi kontrol pekerjaan. Khususnya "Berhenti" berarti bahwa suatu pekerjaan masih hidup tetapi kemampuannya untuk memproses apa pun telah dipegang (tidak diberikan waktu pada CPU untuk memproses apa pun). Ini secara efektif merupakan kondisi "Jeda" atau "Ditangguhkan", meskipun itu bukan istilah teknis yang benar.
CtrlCtidak "menghentikan" pekerjaan, itu membatalkan atau membunuhnya. Secara teknis itu menyebabkan sinyal interupsi untuk dikirim ke program yang memerintahkannya untuk membatalkan apa yang dilakukannya dan segera keluar. Beberapa program akan mendengar sinyal ini dan melakukan pembersihan darurat sendiri sebelum keluar. Orang lain tidak akan menanggapi sinyal dan selanjutnya dibatalkan.
CtrlZ, di sisi lain, "menghentikan" pekerjaan. Sekali lagi ini dilakukan dengan sinyal, tetapi kali ini adalah sinyal 'berhenti' bukan sinyal 'interupsi'. Ini secara efektif menahan dan mengembalikan kontrol ke shell, tetapi tidak benar-benar mematikan pekerjaan. Jika Anda ingin pekerjaan seperti itu terus berjalan, Anda kemudian dapat mengeluarkan
bg
perintah untuk mengirim pekerjaan yang terakhir berhenti ke latar belakang. Ini kemudian akan terus berjalan sebagai pekerjaan latar belakang seolah-olah Anda telah menjalankannya&
sejak awal. Anda juga dapat menggunakanfg
untuk melanjutkan pekerjaan yang berhenti terakhir di latar depan (memungkinkan untuk melanjutkan di mana ia tinggalkan, dan memungkinkan Anda untuk berinteraksi lagi dengan itu).sumber
CTRL+C=SIGINT
danCTRL+Z=SIGTSTP
.