终端中 Ctrl-z 和 Ctrl-c 有什么区别?

终端中 Ctrl-z 和 Ctrl-c 有什么区别?

谁能告诉我ctrl+zctrl+之间的区别c

当我在终端时,这两种组合都会停止当前进程,但是两者之间到底有什么区别呢?

答案1

如果我们将边缘情况放在一边,区别就很简单了。Control+C几乎立即中止应用程序,而Control+Z将其转移到后台并暂停。

shell 根据这些组合向底层应用程序发送不同的信号:

  • Control+ C(控制字符intr)发送 SIGINT,这将中断应用程序。通常会导致其中止,但这取决于应用程序的决定。

  • Control+ Z(控制字符susp)向前台应用程序发送 SIGTSTP,实际上将其置于后台并暂停。如果您需要退出编辑器之类的程序去获取所需的一些数据,这将非常有用。您可以通过运行fg(或中显示的作业号%x在哪里)返回应用程序。xjobs

    我们可以通过运行 来测试nano TEST,然后按Control+Z然后运行ps aux | grep TEST​​。这将向我们显示该nano进程仍在运行:

    oli     3278  0.0  0.0  14492  3160 pts/4    T    13:59   0:00 nano TEST
    

    此外,我们可以看到(从状态列中的 T 来看)该进程已停止。所以它仍然活着,但是没有运行...它可以恢复。

    如果某些应用程序正在进行外部进程(如 Web 请求),而这些进程在它们处于睡眠状态时可能会超时,则它们将会崩溃。

答案2

Ctrl+C用于通过信号终止进程SIGINT,换句话说,这是一种礼貌的

Ctrl+Z 用于通过发送信号来暂停进程SIGTSTP,该信号类似于睡眠信号,可以撤消该信号并再次恢复该进程。

但是当一个进程被暂停时,我们可以通过fg(在前台恢复) 和bg(在后台恢复) 再次恢复它,但我无法恢复一个被终止的进程,这是使用Ctrl+ C& Ctrl+之间的区别Z

我们如何才能看法暂停进程?

jobs命令给出如下输出:

[1]-  Stopped                 cat
[2]+  Stopped                 vi

如何后台暂停的进程?

使用以下kill命令:

kill %nn命令显示的数字在哪里jobs。因此,如果我想杀死 cat kill %1:。

答案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 的程序仍会自行终止,或者至少终止其中运行的任务

答案4

当你按下ctrl+时c,这意味着你向你的进程发送了 SIGINT。就像你输入这个命令:kill -SIGINT <your_pid>。它会杀死你的进程。这就是为什么你在发出时看不到它的原因附言命令。
当您按下ctrl+时z,这意味着您向进程发送 SIGSTOP。就像您输入此命令:kill -SIGKSTOP <your_pid>。它将停止您的进程,但进程仍然处于活动状态。因此,您可以通过向进程发送 SIGCONT 来重新激活进程。

相关内容