CTRL-Z使用终端仿真器时,可以使用或停止当前正在运行的程序CTRL-S。这些信号有什么区别?
答案1
Ctrl-Z实际上会停止当前的前台程序,但与终端模拟器无关。它由您当前运行的 shell 处理。 Unix 的原始 shell 没有此功能,因此您可能会发现在某些系统上缺少此功能,例如引导到单用户模式的最小嵌入式 Linux 版本。
Ctrl-S不一定完全停止当前的前台程序。它所做的只是请求操作系统的终端代码暂时停止向您的终端发送数据。该程序实际上仍在运行,并且事实上,只要它不填充任何输出缓冲区,它甚至不会在系统调用时被阻塞。终端输出暂停功能Ctrl-S是一个古老的功能事实上的标准可以追溯到电传打字机时代,并且按照惯例在所有 Unixy 操作系统中都受支持,但它可以被禁用 ( stty -ixon
) 或反弹到其他内容。Ctrl-S例如,文本编辑器和其他交互式程序经常重新绑定。
您可以看到停止后重新启动方式的进一步差异。Ctrl-Q在之后重新启动终端输出Ctrl-S,而重新启动使用停止的进程Ctrl-Z需要fg
向控制 shell 发出命令。
答案2
一个暂停并后台运行一项作业,一个将其冻结在适当的位置。使用 Z,您将返回到终端并可以运行命令,例如bg
在后台继续作业或fg
在前台继续。使用 S 时,您面前只剩下一个冻结的程序。