0

我正在编写一个库,在其中我 fork() 和 execvp() 来启动另一个程序。据我了解, execvX() 将“自定义”信号处理程序重置为 SIG_DFL,但它没有将任何忽略的信号处理程序设置为 SIG_DFL。

请记住,它是一个库,我无法控制用户将如何处理信号,将忽略信号的信号处理程序设置为 SIG_DFL 是否是个好主意?

如果是,是否有某种方法可以一次将所有信号处理程序设置为 SIG_DFL?我是否必须遍历所有信号编号?在这种情况下,我怎样才能找到最后一个可能的信号编号?我在 bits/signum.h 中看到了 _NSIG。这是 POSIX 的不变部分还是特定于 Linux?

谢谢。

4

1 回答 1

1

根据execve(2)手册页,

任何被捕获的信号的配置都将重置为默认值 ( signal(7) )。

signal(7)手册页添加:

在 an 期间execve(2),已处理信号的处置被重置为默认值;忽略信号的处置保持不变。

所以你需要一一重置你想要忽略或默认的信号,然后再execve

我看到一个NSIG常数/usr/include/signal.h

于 2012-08-22T13:01:43.220 回答