ctrl c vs ctrl z dengan pekerjaan latar depan


26

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 &

4
"Bukankah sebaliknya lebih masuk akal?" Bisakah Anda menentukan mengapa Anda berpikir demikian?
glglgl

Jawaban:


55

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 bgperintah 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 menggunakan fguntuk melanjutkan pekerjaan yang berhenti terakhir di latar depan (memungkinkan untuk melanjutkan di mana ia tinggalkan, dan memungkinkan Anda untuk berinteraksi lagi dengan itu).


Saya masih berpikir bahwa Ctrl + Z akan mengirim SIGKILL dan Ctrl + C mengirimkan SIGINIT. Jadi Ctrl + Z juga akan membunuh pekerjaan itu. Tapi dari contoh saya Ctrl + Z hanya Menghentikan pekerjaan seperti yang Anda katakan. Jadi itu membuat saya sedikit bingung.
neo0

10
@ neo0 - mungkin Anda terbiasa dengan pengaturan khusus yang aneh? Anda dapat mengonfigurasikan hal-hal itu - meskipun Anda seharusnya tidak seandainya memiliki aplikasi yang bergantung pada peta itu. Tetapi konfigurasi default adalah CTRL+C=SIGINTdan CTRL+Z=SIGTSTP.
mikeserv

3
Caleb benar (+1). Ctrl-Z menghentikan program, yang harus Anda anggap sebagai "membekukan" itu, tetapi program itu masih ada dalam memori, file-file itu dibuka, dll. Tidak terbunuh / dihentikan.
Olivier Dulac

"Tangguhkan" mungkin lebih jelas daripada "berhenti".
Russell Borogove

1
@ jiggunjer Itu tentang bentuk benda. Jawaban ini memberikan beberapa latar belakang mengapa dua langkah diperlukan dan yang satu ini memperkenalkan beberapa fungsi untuk membuat langkah-langkah itu lebih tidak menyakitkan.
Caleb
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.