gpt4 book ai didi

c - SIG_IGN 关于 SIGFPE、SIGILL、SIGSEGV 的未定义行为的规范是否多余?

转载 作者:太空宇宙 更新时间:2023-11-04 03:10:44 25 4
gpt4 key购买 nike

POSIX.1-2017 在 XSH 2.4.3 SIG_IGN 下指定那个

The behavior of a process is undefined after it ignores a SIGFPE, SIGILL, SIGSEGV, or SIGBUS signal that was not generated by kill(), sigqueue(), or raise().

我想知道强调部分的意义是什么?

您能否忽略仅由上述函数生成的那些信号,同时避免调用未定义的行为?

最佳答案

如果您希望内核生成这些信号,您不应该SIG_IGN-ore。

您可以使用 .sa_flags 中的 sigactionSA_SIGINFO 捕获它们并使用 SA_SIGINFO 这样您就可以使用info->si_code 在处理程序中区分内核发送和用户发送的变体。如果您在信号不是内核发送的情况下在处理程序中什么也不做,如果是,则退出/中止,然后使用 SA_RESTART 处理程序,您基本上已经获得了 的用户空间模拟SIG_IGN 也适用于内核发送的 SISGEVSIGILL

如果您使用真正的SIG_IGN,您必须注意不要激怒内核生成这些信号(没有无效的内存引用,没有无效的指令等)。

我认为 POSIX 允许您安全地忽略 SIGFPESIGILLSIGSEGVSIGBUS,因为有没有充分的理由断然禁止在所有情况下忽略这些信号,但我不认为该功能背后没有太大意义。

关于c - SIG_IGN 关于 SIGFPE、SIGILL、SIGSEGV 的未定义行为的规范是否多余?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56580209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com