在作业控制上shell如何恢复terminal参数?

进程置于后台然后再置于前台时,terminal状态如何保存/恢复? 我正在阅读https://www.gnu.org/software/libc/manual/html_node/Foreground-and-Background.html这给了我一个想法,tcgetattr / tcsetattr负责这个,但参数像游标configuration,备用(杯)模式不放在termios结构中。 我设法用简单的testing代码来validation:

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

或者用SIGCONT信号放在前台处理重绘terminal本身? 我试图手动发送到一些程序,但不能确定是否重新绘制。

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

一般来说,大部分修改终端状态的应用程序,它们会干扰外壳,将捕获^ Z和重置终端的状态,然后再自己背景。 此外,大多数shell将在打印提示时重置光标的笔颜色和位置。 综合起来,这两个因素就足够了,内核不需要介入。