作业控制上的 shell 如何恢复终端参数?
How are terminal parameters restored by the shell on job control?
当进程进入后台然后再次进入前台时,终端状态 saved/restored 是怎样的?
我正在阅读 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 信号置于前台后重新绘制终端本身?我试过手动将它发送到某些程序,但无法确定它是否重新绘制。
tcgetattr()
和 tcsetattr()
函数获取和设置终端 device 的状态。这包括波特率、本地回显和将控制字符转换为信号等选项。它不包括远程终端仿真器(或者可能是物理终端!)的状态。
一般来说,大多数修改终端状态足以干扰 shell 的应用程序将捕获 ^Z 并在后台运行之前重置终端状态.此外,大多数 shell 会在打印提示时重置光标笔的颜色和位置。结合起来,这两个因素就足够了,内核没有必要参与其中。
当进程进入后台然后再次进入前台时,终端状态 saved/restored 是怎样的? 我正在阅读 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 信号置于前台后重新绘制终端本身?我试过手动将它发送到某些程序,但无法确定它是否重新绘制。
tcgetattr()
和 tcsetattr()
函数获取和设置终端 device 的状态。这包括波特率、本地回显和将控制字符转换为信号等选项。它不包括远程终端仿真器(或者可能是物理终端!)的状态。
一般来说,大多数修改终端状态足以干扰 shell 的应用程序将捕获 ^Z 并在后台运行之前重置终端状态.此外,大多数 shell 会在打印提示时重置光标笔的颜色和位置。结合起来,这两个因素就足够了,内核没有必要参与其中。