Ctrl-S / XOFF 对进程的影响

Ctrl-S / XOFF 对进程的影响

当我运行时,apt upgrade我不小心向该终端窗口发送了一个Ctrl- 。S

现在我知道了XOFF,,XON- ,以及一些关于电传打字机的新东西CtrlQ

当我向“暂停”终端发送一个Ctrl-时,继续其工作。Qapt

通过阅读XOFF,我不清楚apt在接收到 的任何命令中发生了什么,或者通常会发生什么XOFFhtop停止更新显示,这是一件好事,但仍在htop运行?

还在apt跑吗?或者实际上被apt暂停htop、冻结了?

显然,进程仍然可以接收输入,而XOFF'd,因此它们仍在执行。

怎么了?例如,程序计数器,显然它并不是简单地停止增加程序计数器、冻结程序。

它是否取决于命令如何编程来处理 XOFF?基本 Linux 命令是否存在可以预期的一般行为?

笔记类似的问题不包含我的问题的答案,因为它们没有提到程序本身发生的情况。例如,我不知道是否apt继续默默运行,或者是否被冻结/暂停。

答案1

您可能已经知道,XONXOFF,默认情况下绑定到Ctrl+SCtrl+ Q,是软件流量控制人物和原则上的遗物纸质打印电传终端的旧时代。当接收设备(通常是纸质打印机)有时无法跟上远程发送器发送的输入时,就会使用它们。

如今,纸质电传打字机已不再使用,但其背后的想法仍然保留在“终端”的软件框架中(参见例如这里这篇关于 TTY 历史的非常好的文章),它继承并仍然实现了原始纸质终端中使用的一些概念 - 其中之一是解释流量控制字符的能力。

通常,“在控制台上”运行的程序(即连接到伪终端)不会看到XONXOFF字符,因为它们默认由终端捕获,其中标准行为XOFF是停止打印输出从程序接收。程序本身不受影响,并继续在后台运行,只是输出不会“转发”给用户,直到XON再次收到。

如果您编写程序并希望显式接收这些输入字符,则可以tcsetattr()在程序中使用系统调用通过标志禁用软件流控制IXOFF(请参阅在这里,例如)--nano这样做, 例如。

答案2

htop停止更新显示,这是值得知道的事情,但htop仍在运行[输入 Ctrl-S 后]?

是的,一点没错。htop或其他命令不会被 Ctrl-S 停止或冻结。

termiosIXON设置不像ISIG.键入VSTOP(Ctrl-S) 或VSTART(Ctrl-Q) 字符不会向终端中运行的进程发送任何信号。

检查起来很容易;打开两个终端:在第一个输入

tail -f /tmp/file

在第二个

cat > /tmp/file

现在,在第二个终端中键入 Ctrl-S,然后继续盲目键入行,然后按 Enter。它们将出现在第一个终端的屏幕上。如果不是catshell 并且这些命令是类似 的命令rm ...,那么它们将运行而无需在屏幕上回显。

在接收到 XOFF 的任何命令中通常会发生什么。

该命令不“接收 XOFF”。这一切都在终端驱动程序内部处理。从应用程序的角度来看,什么也没有发生。如果程序不断发送大量输出(或者ECHOtermios 设置处于默认状态,并且它不断接收大量输入),则任何对终端的写入(或相应的读取)都会在某个时刻被阻止,直到收到 Ctrl-Q。

相关内容