如何在作业控制上恢复shell的终端参数?

时间:2017-07-22 22:57:16

标签: c linux terminal termios

当进程在后台再放入前台时,如何保存/恢复终端状态? 我正在阅读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信号放入前台后重新制作终端本身?我试图将它手动发送到一些程序,但无法确定它是否重新粉刷。

1 个答案:

答案 0 :(得分:3)

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

一般来说,大多数修改终端状态以至于它们干扰shell的应用程序将捕获 ^ Z 并在自我背景之前重置终端的状态。此外,大多数shell会在打印提示时重置光标的笔颜色和位置。综合起来,这两个因素足以让内核无需参与。