Bash
具有前台作業的 ctrl c 與 ctrl z
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
在前台恢復上次停止的作業(允許它從停止的地方繼續,並允許您再次與它互動)。