neo*_*eo0 31 shell bash signals job-control
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 &
Run Code Online (Sandbox Code Playgroud)
Cal*_*leb 64
我认为您可能对作业控制符号感到困惑。值得注意的是“停止”意味着作业仍然存在,但它处理任何事情的能力已经被保留(CPU 没有任何时间来处理任何事情)。这实际上是“暂停”或“暂停”状态,尽管这不是正确的技术术语。
CtrlC不会“停止”工作,它会取消或杀死它。从技术上讲,它会导致向程序发送一个中断信号,告诉它中止正在执行的操作并立即退出。有些程序会听到这个信号,并在退出之前对自己做一些紧急清理工作。其他人不会响应该信号并随后被中止。
CtrlZ,另一方面,“停止”工作。同样,这是通过信号完成的,但这次是“停止”而不是“中断”信号。这有效地将其搁置并将控制权返回给 shell,但实际上并不会终止该作业。如果您希望这样的作业继续运行,则可以发出bg命令将上次停止的作业发送到后台。然后它将继续作为后台作业运行,就像您首先运行它一样&。您还可以使用fg在前台恢复上次停止的作业(允许它从停止的地方继续,并允许您再次与其交互)。