This is regarding the application that runs on POSIX (Linux) environment. Most signals (e.g. Ctrl+C - signal 2, SIGINT), and few others are handled. When that is done the exit()
system call is called from the handler with a desirable exit code.
但是,有一些信号无法处理,例如 Signal 9 和 Signal 15。
不幸的是,如果信号 9 或 15 是终止的原因,则启动给定应用程序的父进程(外部脚本)需要了解并清理一些内容。
是否有一个预定义的退出代码可以被父进程接收以了解上述内容?
启动应用程序的脚本是 bash_script。应用程序本身是用 C 语言编写的。
返回状态来自wait()
or waitpid() http://pubs.opengroup.org/onlinepubs/9699919799/functions/waitpid.html对您需要的信息进行编码。
POSIX 宏是:
-
WIFEXITED(status)
如果孩子通过以下方式退出,则返回 trueexit()
或其亲属之一。
-
WEXITSTATUS(status)
告诉您退出状态是什么(0..255)。
-
WIFSIGNALED(status)
如果子进程因信号(任何信号)而退出,则返回 true。
-
WTERMSIG(status)
返回杀死孩子的信号编号。
非标准但通用的宏WCOREDUMP(status)
告诉您进程是否转储核心。您还可以判断状态是否反映进程已停止或继续(以及停止信号是什么)。
请注意,信号 15 通常是 SIGTERM,并且 SIGTERM 可以被应用程序捕获。无法捕获的信号是 SIGKILL (9) 和 SIGSTOP(Mac OS X 上为 17;各地可能不尽相同)。
那么问题是如果bash
为脚本提供此信息。
答案是肯定的,但只是间接的,并不是 100% 明确的。报告的状态值bash
将128 + <signum>
对于因信号而终止的进程<signum>
,但是你无法区分以状态退出的进程130
,比如说,一个被 SIGINT(又名信号 2)中断的进程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)