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