清除 termios 结构中的 ISIG 标志禁用什么信号?

问题描述 投票:0回答:1

Open Group 的手册页

termios.h
没有指定任何内容:

ISIG

使能信号。

OpenBSD 的手册页

termios.h
规格:

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

虽然Linux的手册页

termios.h
指定:

ISIG

当任何字符 INTR、QUIT、SUSP 或 DSUSP 接收到,产生相应的信号。

OpenBSD 和 Linux 会忽略

SIGINT
SIGSTSP
SIGCONT
SIGQUIT
信号,但是 POSIX 是否记录了这种行为?还是实现定义的?

c posix termios
1个回答
1
投票

根据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
功能发送信号。

© www.soinside.com 2019 - 2024. All rights reserved.