Unix 命令行中的 Ctrl+Z 和 Ctrl+C 有什么区别?

Unix 命令行中的 Ctrl+Z 和 Ctrl+C 有什么区别?

我正在使用 Mac OS X 终端。我使用Ctrl+ZCtrl+C来停止一些程序。但我意识到我不知道它们到底在做什么。它们是什么,它们之间有什么区别?

这个问题本周超级用户问题.
阅读 2011 年 3 月 13 日博客条目了解更多详情或提交你自己的本周问题。

答案1

Control+Z用于暂停向进程发送信号SIGTSTP,该信号无法被程序拦截。而Control+C用于一个具有信号的进程SIGINT,并且可以被程序拦截,以便它可以在退出之前清理自身,或者根本不退出。

如果你暂停一个进程,那么 shell 中会显示以下信息告诉你该进程已被暂停:

[1]+  Stopped                 yes

但是,如果您终止一个进程,除了返回到 shell 提示符外,您不会看到任何确认信息。暂停进程时,您还可以用它做一些有趣的事情。例如,运行以下命令:

fg

暂停程序将会使其回到前台。

并运行命令

bg

暂停程序将允许其在后台运行(但程序的输出仍然会发送到 TTY)。

如果你想终止一个暂停的程序,你不必先将它带回来fg,你可以简单地执行以下命令:

kill %1

如果有多个暂停的命令,则运行

jobs

将列出它们,如下所示:

[1]-  Stopped                 pianobar
[2]+  Stopped                 yes

使用%#,其中#是作业编号(输出中方括号内的作业编号jobs)以及bgfg、 或kill,可用于对该作业执行操作。

答案2

Ctrl+Z 使用 SIGTSTP 暂停进程,您可以稍后恢复它。Ctrl+C 使用 SIGINT 终止进程,除非目标处理/忽略该进程,否则它会终止进程,因此您无法恢复它。还有一个 SIGSTOP 可以由目标发送,kill()并且进程无法拦截。SIGCONT 是 SIGSTOP 和 SIGTSTP 的对应项,用于取消暂停进程。

答案3

CTRL+Z 停止(暂停)作业

CTRL+C 终止作业

使用 CTRL+C 无法恢复该过程,但使用 CTRL+Z 只需在命令提示符下输入即可恢复该作业:

fg %1

如果你有多个进程暂停,那么你应该这样做

jobs

查看输出并选择适当的数字来恢复例如

fg %3

恢复列表中的第三个作业。您还可以使用

bg %n

其中 n 是作业编号。

答案4

CTRL+Z停止(暂停)作业

CTRL+C终止工作

使用CTRL+C无法恢复该过程,但使用CTRL+Z只需在命令提示符下输入即可恢复该作业:

功能 %1

如果你有多个进程暂停,那么你应该这样做

工作

查看输出。

相关内容