#1 楼
如果将边缘盒留在一侧,则区别很简单。 Control + C几乎立即中止应用程序,而Control + Z将其分流到后台并挂起。Shell通过这些组合向底层应用程序发送不同的信号: br /> Control + C(控制字符
intr
)发送SIGINT,它将中断应用程序。通常会使其中止,但这取决于应用程序。Control + Z(控制字符
susp
)将SIGTSTP发送到前台应用程序,从而有效地将其置于后台并挂起。如果您需要突破诸如编辑器之类的功能来获取所需的数据,这将很有用。您可以通过运行fg
(或%x
,其中x
是作业编号,如jobs
所示)返回应用程序。 。这将向我们显示nano TEST
进程仍在运行:oli 3278 0.0 0.0 14492 3160 pts/4 T 13:59 0:00 nano TEST
此外,我们可以从状态栏中的T看到该进程停了因此它仍然存在,但尚未运行...可以恢复。
如果某些应用程序具有正在进行的外部进程(例如Web请求),这些应用程序可能在睡眠时超时,则它们将崩溃。
评论
值得补充的是,还可以运行bg(而不是fg)来取消挂起Ctrl + Z的应用程序,而无需将其放回前台。有效地控制了启动应用程序的外壳和应用程序本身,就像您在启动应用程序时使用&一样。当您忘记以&开头时,这通常会派上用场
–马尔特·斯科鲁帕(Malte Skoruppa)
2014年8月13日14:10
您可以再次输入fg返回该过程!
– sleblanc
2014年8月14日下午3:15
如果有多个作业被暂停或在后台运行:“作业”列出它们,然后使用“ fg%n”或“ bg%n”甚至“杀死%n”将作业%n置于前景,背景中或将其杀死。
–奥利维尔·杜拉克(Olivier Dulac)
2014年8月14日9:20
@Oli:您的第二段内容是:“外壳程序将……信号发送给底层应用程序……”。不,操作系统/终端驱动程序发送信号。 (在窗口系统中,窗口管理器可能会发挥作用。)此外,为了完整起见(尽管超出了原始问题的范围),您可能需要提及Ctrl + \。
–斯科特
2014年8月15日在23:08
在执行ctrl c或ctrl z之后,会话如何知道哪个进程组必须返回到前台?它默认为SID(bash)吗?
– Jiggunjer
16 Sep 9'在12:29
#2 楼
Ctrl + C用于终止信号为SIGINT
的进程,换句话说,这是礼貌的杀害。睡眠信号,可以撤消该信号,然后可以再次恢复该进程。但是,当某个进程挂起时,我们可以通过
SIGTSTP
(在前台恢复)和fg
(在后台恢复)再次恢复但我无法恢复被终止的进程,这与使用Ctrl + C和Ctrl + Z有所区别。给出如下输出:[1]- Stopped cat
[2]+ Stopped vi
如何在后台杀死挂起的进程?
通过使用
bg
命令:jobs
,其中kill
是kill %n
命令显示的数字。所以,如果我想杀死猫:n
。评论
根据该线程中的其他注释,更正:ctrl-z发送SIGTSTP信号而不是SIGSTOP。
– lukewendling
17年1月19日,下午3:10
杀死%1告诉我-不允许进行操作。为什么这样?谢谢
– Satya Prakash
17-10-31在7:30
#3 楼
Control + Z暂停进程(SIGTSTP
),而Control + C中断进程(SIGINT
)http://en.wikipedia.org/wiki/Control-Z
在类似Unix的系统上,Control + Z是最常见的默认键盘映射,用于挂起进程的键序列
http://en.wikipedia.org/ Wiki / Control-C
在POSIX系统中,该序列使活动程序接收到SIGINT信号。如果程序未指定如何处理此情况,它将终止。通常,处理SIGINT的程序仍会自行终止,或至少终止在其内部运行的任务
评论
干得好发布参考。但是一般来说,维基百科不是很好的技术参考资料来源。
–亚伦
14年8月13日在14:14
@ BryceAtNetwork23是非常正确的;在这种情况下,我觉得Wikipedia的定义已经足够了。我将来会寻找更多技术参考!
–睡眠被剥夺的Bulbasaur
14年8月13日在14:16
#4 楼
简单地说:CTRL-C请求程序中止。
CTRL-Z强制程序挂起并进入程序。
。这允许您稍后使用命令
fg
恢复它。退出登录外壳时,其余的后台任务将被杀死。#5 楼
这应该有助于Ctrl + Z通过向其发送信号SIGSTOP来暂停进程,该信号不能被程序拦截。 Ctrl + C用于终止带有SIGINT信号的进程,并且可以被程序拦截,以便它可以在退出之前清理自身,或者完全不退出。评论
这并不完全正确。它发送SIGTSTP,程序可以捕获它。有四种不同的信号,可以挂起程序SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU。其中只有SIGSTOP无法被阻止。终端使用其他三个在不同条件下停止该过程。
–卡巴斯德
2014年8月15日在11:59
#6 楼
当您按ctrl + c时,表示您将SIGINT发送到您的进程。就像您键入此命令:kill -SIGINT <your_pid>
。它将杀死您的过程。这就是为什么在发出ps命令时看不到它的原因。按ctrl + z时,表示将SIGSTOP发送到进程。就像您键入此命令:
kill -SIGKSTOP <your_pid>
。它将停止您的过程,但是该过程仍然有效。因此,您可以通过将SIGCONT发送给您的流程来重新激活您的流程。
评论
我在这里问了一个非常类似的问题:unix.stackexchange.com/questions/116959/…更紧密的匹配:Unix命令行中的Ctrl + Z和Ctrl + C有什么区别?在超级用户上。
是的,我成功地理解了两者之间的区别!
我想在这里补充一件事,大多数人(在我的职业圈子中)也不区分他们。并使用CTRL-Z选项终止命令。这是错误的做法。您必须在所有这些实例上使用CTRL-C。正如CTRL-Z只是放在后台。因此,进程直到完成才终止,这在用户按下CTRL-Z终止时(多数情况下)是用户不希望的。