当进程在后台再放入前台时,如何保存/恢复终端状态? 我正在阅读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信号放入前台后重新制作终端本身?我试图将它手动发送到一些程序,但无法确定它是否重新粉刷。
答案 0 :(得分:3)
tcgetattr()
和tcsetattr()
函数获取并设置终端设备的状态。这包括波特率,本地回声以及控制字符到信号的转换等选项。它不包括远程端的终端仿真器(或可能是物理终端!)的状态。
一般来说,大多数修改终端状态以至于它们干扰shell的应用程序将捕获 ^ Z 并在自我背景之前重置终端的状态。此外,大多数shell会在打印提示时重置光标的笔颜色和位置。综合起来,这两个因素足以让内核无需参与。