问题描述
谁能告诉我ctrl
+ z
和ctrl
+ c
之间的区别?
当我在终端时,两种组合都会停止当前进程,但两者之间的区别究竟是什么?
最佳解决思路
如果我们将边案例放在一边,区别很简单。 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)the process has been stopped。所以它还活着,但它没有运行……它可以恢复。
如果某些应用程序有持续的外部进程(如Web请求),可能会在睡眠时超时,则某些应用程序会崩溃。
次佳解决思路
Control
+ Z
暂停进程(SIGTSTP
),Control
+ C
中断进程(SIGINT
)
http://en.wikipedia.org/wiki/Control-Z
On Unix-like systems, Control+Z is the most common default keyboard mapping for the key sequence that suspends a process
http://en.wikipedia.org/wiki/Control-C
In POSIX systems, the sequence causes the active program to receive a SIGINT signal. If the program does not specify how to handle this condition, it is terminated. Typically a program which does handle a SIGINT will still terminate itself, or at least terminate the task running inside it
第三种解决思路
Ctrl
+ C
用于杀死一个信号为SIGINT
的进程,换句话说它是一种礼貌杀手。
Ctrl
+ Z
用于通过发送信号SIGSTOP暂停进程,该信号类似于睡眠信号,可以撤消并且可以再次恢复进程。
但是当一个进程暂停时,我们可以通过fg (resume in forground)
和bg (resume in background)
再次恢复,但是我不能恢复一个被杀死的进程,这与使用Ctrl
+ C
和C
& Ctrl
+ Z
。
如何查看暂停的进程?
通过使用作业命令,输出将是:
[1]- Stopped cat
[2]+ Stopped vi
如何杀死后台暂停的进程?
通过使用kill命令:
杀%n其中n将数字显示在作业命令,所以我想杀 cat :kill %1
。
第四种思路
This应该有所帮助
Ctrl+Z is used for suspending a process by sending it the signal SIGSTOP, which cannot be intercepted by the program. While Ctrl+C is used to kill a process with the signal SIGINT, and can be intercepted by a program so it can clean its self up before exiting, or not exit at all.
第五种思路
当您按下ctrl
+ c
时,这意味着您将SIGINT发送到您的进程。就像你输入这个命令:kill -SIGINT <your_pid>
。它会杀了你的过程。这就是为什么当发出ps命令时你看不到它。当你按下ctrl
+ z
时,这意味着你发送SIGSTOP到你的进程。就像你输入这个命令:kill -SIGKSTOP <your_pid>
。它会停止你的过程,但这个过程仍然存在。因此,您可以通过向您的流程发送SIGCONT来将re-activate发送到您的流程。
第六种思路
简而言之:
-
CTRL
–C
请求程序中止。 -
CTRL
–Z
强制程序暂停并进入后台。这允许您稍后使用命令fg
恢复它。当您退出登录shell时,剩余的后台任务将被终止。