2011-03-27 00:39:57 +0000 2011-03-27 00:39:57 +0000
191
191

在Unix命令行中Ctrl+Z和Ctrl+C有什么不同?

我使用的是Mac OS X终端。而且我用Ctrl+Z或Ctrl+C来停止一些程序。但是我发现,我不知道它们到底在做什么?

这个问题是本周超级用户问题。 阅读2011年3月13日的*博客文章,了解更多详情或提交你自己的***本周问题。

答案 (6)

255
255
255
2011-03-27 01:15:51 +0000

Control+Z是用来中止一个进程,向它发送信号SIGSTOP来中止一个进程,它不能被程序拦截。而Control+C是用来杀死一个进程的信号SIGINT,可以被程序拦截,这样它可以在退出前自行清理,或者根本不退出。

如果你暂停一个进程,会在shell中显示出这个信息,告诉你它已经被暂停了:

[1]+ Stopped yes

但是,如果你杀死一个进程,除了被掉回shell提示外,你不会看到任何确认。当你暂停一个进程,你也可以对它做一些花哨的事情。

如果你想杀死一个被暂停的程序,不需要先用fg把它带回来,只需执行以下命令:

fg

如果你有多个被暂停的命令,运行

bg

会列出它们,就像这样。

kill %1

%# 使用#,其中jobs是作业号(bg输出的方括号),用fgkill或&007,就可以对该作业进行操作。

22
22
22
2011-03-27 00:43:15 +0000

Ctrl+Z 暂停SIGTSTP进程,你可以稍后恢复。Ctrl+C会用SIGINT杀死该进程,除非目标处理/忽略了该进程,否则就会终止该进程,所以你不能恢复它。还有一个SIGSTOP,可以通过kill()发送,进程无法拦截。SIGCONT是SIGSTOP和SIGTSTP的反义词,它可以解除进程的中断。

18
18
18
2011-03-27 11:52:36 +0000

CTRL+Z 停止(暂停)一个工作

CTRL+C 终止一个工作

使用CTRL+C,你不能恢复进程,但使用CTRL+Z,只需在命令promt:

fg %1

中输入命令就可以恢复工作,如果你有多个进程暂停,那么你应该执行

jobs

,然后选择适当的数字来恢复,例如:

fg %3

。 例如:

bg %n

会恢复列表中的第三个作业。你也可以让作业在后台运行

&001

,其中n是作业编号。

3
3
3
2014-07-03 15:57:10 +0000

CTRL+Z停止(暂停)一个工作

CTRL+C终止一个工作

使用CTRL+C你不能恢复进程,但使用CTRL+Z可以通过在命令提示符中输入:

fg %1

如果你有多个进程暂停,那么你应该执行

jobs

来查看输出。

3
3
3
2014-03-13 06:48:21 +0000
Cntrl + Z pause the currently running process.

Cntrl + C simply terminates the running process.

***_使用Cntrl + C不能恢复进程,而使用Cntrl + Z可以恢复进程。

2
2
2
2013-02-26 17:19:22 +0000

前面的答案是正确的,但是不知道为什么Ctrl-Z也会暂停所有的子进程,但是killall -SIGSTOP ……….只暂停最前面的(父进程),让子进程随心所欲地运行。