C语言 清除termios结构中的ISIG标志会禁用哪些信号?

zdwk9cvp  于 2023-03-11  发布在  iOS
关注(0)|答案(1)|浏览(122)

termios.hOpen Group's man page不指定任何内容:
ISIG
启用信号。
用于termios.hOpenBSD's man page规定:

ISIG /* enable signals INTR, QUIT, [D]SUSP */

termios.hLinux's man page指定:
ISIG
当接收到INTR、QUIT、SUSP或DSUSP中的任何字符时,生成相应的信号。
OpenBSD和Linux忽略了SIGINTSIGSTSPSIGCONTSIGQUIT信号,但是POSIX记录了这种行为吗?

dgiusagp

dgiusagp1#

根据https://pubs.opengroup.org/onlinepubs/9699919799/toc.htm
11.1.9特殊字符
内部
输入端的一种特殊字符,如果设置了ISIG标志,就能识别该字符。它产生一个SIGINT信号,发送给前台进程组中的所有进程,该进程组的终端是控制终端。如果设置了ISIG标志,则在处理该字符时,INTR字符将被丢弃。
退出
输入端的一种特殊字符,如果设置了ISIG标志,就能识别该字符。它产生一个SIGQUIT信号,发送给前台进程组中的所有进程,该进程组的终端是控制终端。如果设置了ISIG标志,则在处理时,QUIT字符将被丢弃。
...
超级用户
如果设置了ISIG标志,则SUSP字符的接收应导致SIGTSTP信号被发送到前台进程组中的所有进程,其中终端是控制终端,并且SUSP字符应在处理时被丢弃。
该条还规定:
如果设置了IEXTEN,则应从输入数据中识别实现定义的函数。设置的IEXTEN如何与ICANON、ISIG、IXON或IXOFF交互由实现定义。如果未设置IEXTEN,则不应识别实现定义的函数,并按照ICANON、ISIG、IXON和IXOFF的说明处理相应的输入字符。
关于DSUSP,可以阅读 * UNIX环境中的高级编程 *(W. Richard Stevens,Stephan A. Rago),第3版:
18.3特殊输入字符
...
DSUSP系统
延迟挂起的作业控制字符。如果支持作业控制并且设置了ISIG标志,则在扩展方式(IEXTEN)下输入时可以识别该字符。
最后,值得一提的是,这仅禁用了用于生成相应信号的特殊字符,信号仍然可以使用kill函数发送。

相关问题