【问题标题】:How are terminal parameters restored by the shell on job control?shell 如何在作业控制上恢复终端参数?
【发布时间】:2017-12-28 19:47:08
【问题描述】:

当进程置于后台然后再次置于前台时,如何保存/恢复终端状态? 我正在阅读https://www.gnu.org/software/libc/manual/html_node/Foreground-and-Background.html,它让我知道 tcgetattr/tcsetattr 对此负责,但是光标配置、备用(杯)模式等参数并未放入 termios 结构中。我已经设法用简单的测试代码验证了这一点:

struct termios t;
tcgetattr( 0, &t);
// change something
tcsetattr(0, TCSANOW, &t);

或者进程在使用 SIGCONT 信号置于前台后可能会重新绘制终端本身?我尝试将其手动发送到某些程序,但无法确定它是否重新绘制。

【问题讨论】:

    标签: c linux terminal termios


    【解决方案1】:

    tcgetattr()tcsetattr() 函数获取和设置终端设备的状态。这包括波特率、本地回显和将控制字符转换为信号等选项。它不包括远程终端仿真器(或者,可能是物理终端!)的状态。

    一般来说,大多数修改终端状态以至于它们会干扰 shell 的应用程序会捕获 ^Z 并在后台运行之前重置终端的状态。此外,大多数 shell 会在打印提示时重置光标的笔颜色和位置。结合起来,这两个因素就足够了,内核没有必要参与其中。

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 2010-10-18
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      相关资源
      最近更新 更多