谁能告诉我ctrl+z和ctrl+之间的区别c?
当我在终端时,这两种组合都会停止当前进程,但是两者之间到底有什么区别呢?
答案1
如果我们将边缘情况放在一边,区别就很简单了。Control+C几乎立即中止应用程序,而Control+Z将其转移到后台并暂停。
shell 根据这些组合向底层应用程序发送不同的信号:
Control+ C(控制字符
intr
)发送 SIGINT,这将中断应用程序。通常会导致其中止,但这取决于应用程序的决定。Control+ Z(控制字符
susp
)向前台应用程序发送 SIGTSTP,实际上将其置于后台并暂停。如果您需要退出编辑器之类的程序去获取所需的一些数据,这将非常有用。您可以通过运行fg
(或中显示的作业号%x
在哪里)返回应用程序。x
jobs
我们可以通过运行 来测试
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 %n
n
命令显示的数字在哪里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 来重新激活进程。