有人能告诉我ctrl + z和ctrl + c之间的区别吗? >

评论

我在这里问了一个非常类似的问题:unix.stackexchange.com/questions/116959/…

更紧密的匹配:Unix命令行中的Ctrl + Z和Ctrl + C有什么区别?在超级用户上。

是的,我成功地理解了两者之间的区别!

我想在这里补充一件事,大多数人(在我的职业圈子中)也不区分他们。并使用CTRL-Z选项终止命令。这是错误的做法。您必须在所有这些实例上使用CTRL-C。正如CTRL-Z只是放在后台。因此,进程直到完成才终止,这在用户按下CTRL-Z终止时(多数情况下)是用户不希望的。

#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,其中killkill %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发送给您的流程来重新激活您的流程。