首先,我知道过去也有过类似的问题 https://stackoverflow.com/questions/5297062/recommended-signals-to-catch.
但这个问题没有得到正确的回答。相反,它转而建议如何捕捉信号。
所以只是为了澄清:我已经做了处理信号所需的一切。
我有一个应用程序,它派生了一个通过管道监视主进程的守护进程。
如果主进程崩溃(例如分段错误),它有一个信号处理程序,将所有必需的信息写入管道并中止。
目标是获得尽可能多的信息当应用程序发生问题时,不会干扰“正常”操作,例如 SIGHUP、SIGUSR1 等。
所以我的问题是:我应该捕捉哪些信号?我的意思是,如果我没有抓住它们,就会导致应用程序中止。
到目前为止,我已经列出了以下列表:
- SIGINT(^C,用户发起的,但仍然很高兴知道)
- 信号术语(
kill <pid>
来自 shell,或者据我所知,可能是 OutOfMemory 的结果)
- SIGSEGV
- SIGILL
- SIGFPE
- SIGBUS
- SIGQUIT
有人知道我是否错过了什么吗?kill -l
有很多...:)
我正在看我的 unix 环境高级编程 (Stevens) 的副本。根据信号部分中的表格,如果您不捕获以下 POSIX 信号,则默认情况下它们将终止进程。监控您不使用的所有这些并不是不合理的:
- SIGABRT
- SIGALRM
- SIGFPE
- SIGHUP
- SIGILL
- SIGINT
- SIGKILL
- SIGPIPE
- SIGQUIT
- SIGSEGV
- SIGTERM
- SIGUSR1
- SIGUSR2
除了 SIGKILL 之外,您可以捕获所有这些,但希望您不会经常出现 SIGKILL。
请注意,您的信号手册页(man 7 signal
)应该为您提供适合您的系统的正确列表 - 这是 POSIX 列表,并且可能会根据您的体系结构而有所不同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)