Bash

具有前台作業的 ctrl c 與 ctrl z

  • August 26, 2016

Ctrl+Z停止工作,而Ctrl+終止C工作。

這是為什麼?其他方式不是更有意義嗎?

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 &

我認為您可能對作業控制符號感到困惑。值得注意的是,“已停止”意味著作業仍然存在,但它處理任何內容的能力已被保留(CPU 上沒有任何時間來處理任何內容)。這實際上是“暫停”或“暫停”狀態,儘管這不是正確的技術術語。

  • Ctrl``C不會“停止”一項工作,它會取消或終止它。從技術上講,它會導致向程序發送一個中斷信號,告訴它中止正在執行的操作並立即退出。一些程序會聽到這個信號,並在退出之前對自己進行一些緊急清理工作。其他人不會對信號做出反應,隨後就會被中止。
  • Ctrl``Z,另一方面,“停止”工作。同樣,這是通過信號完成的,但這次是“停止”而不是“中斷”信號。這有效地將其置於暫停狀態並將控制權返回給 shell,但實際上並沒有終止工作。如果您希望這樣的作業繼續執行,則可以發出bg命令將最後停止的作業發送到後台。然後它將繼續作為後台作業執行,就好像您首先執行它一樣&。您也可以使用fg在前台恢復上次停止的作業(允許它從停止的地方繼續,並允許您再次與它互動)。

引用自:https://unix.stackexchange.com/questions/135077