返回无法处理的POSIX信号的代码

Dip*_*hta 2 c linux signals exit-code

这是关于在POSIX(Linux)环境中运行的应用程序.处理大多数信号(例如Ctrl+ C- 信号2,SIGINT)和其他信号.完成后,exit()系统调用将从处理程序中调用,并带有所需的退出代码.

但是,有些信号如Signal 9和Signal 15无法处理.

不幸的是,如果信号9或15是终止的原因,启动给定应用程序的父进程(外部脚本)需要知道并清理一些东西.

是否有预定义的退出代码可以由父进程接收以了解上述内容?

启动应用程序的脚本是bash_script.应用程序本身在C.

Jon*_*ler 5

返回状态wait()waitpid()编码您需要的信息.

POSIX宏是:

  • WIFEXITED(status)如果孩子通过exit()其亲属或其亲属退出,则返回true .
  • WEXITSTATUS(status) 告诉你退出状态是什么(0..255).
  • WIFSIGNALED(status) 如果孩子因信号(任何信号)退出,则返回true.
  • WTERMSIG(status) 返回杀死孩子的信号.

非标准但常见的宏WCOREDUMP(status)告诉您进程是否转储了核心.您还可以判断状态是否反映过程已停止或继续(以及停止信号是什么).

注意,信号15通常是SIGTERM,SIGTERM可以被应用程序捕获.无法捕获的信号是SIGKILL(9)和SIGSTOP(Mac OS X上的17;在任何地方可能都不一样).


那么问题是如果bash为脚本提供此信息.

答案是肯定的,但只是间接而不是100%毫不含糊.报告的状态值bash128 + <signum>用于因信号<signum>而终止的进程,但是您无法区分退出状态130的进程,例如,SIGINT中断的进程,即信号2.