我需要捕获子进程的返回值..
问题是:使用等待进程()函数我只能捕获返回值的8位
WEXITSTATUS(wstatus)
返回子进程的退出状态。这包括
孩子状态参数的最低有效 8 位
在对 exit(3) 或 _exit(2) 的调用中指定或作为参数指定
main() 中的 return 语句。这个宏应该是
仅当 WIFEXITED 返回 true 时才使用。
如何捕获从返回的完整 int 值main()
?
编辑:Stackoverflow 迫使我编辑这个问题,因为它链接了另一个已回答的问题,但它与我的无关!
POSIX 要求完整的退出值被传递到si_status
的成员siginfo_t
传递给 SIGCHLD 处理程序的结构,如果它是通过调用适当建立的sigaction
with SA_SIGINFO
标志中指定:
如果si_code等于CLD_EXITED,则si_status保存进程的退出值;否则,它等于导致进程改变状态的信号。si_status 中的退出值应等于完整退出值(即传递给 _exit()、_Exit() 和 exit() 的值,或从 main() 返回的值);它不应限于该值的最低有效八位.
(强调我的)。
请注意,经过测试,Linux 似乎不满足此要求,并且仅返回 si_status 成员中退出代码的低 8 位。其他操作系统可能会正确返回完整状态; FreeBSD 确实如此。请参阅此处的测试程序.
但请注意,并不完全清楚您将为每个子进程终止收到一个单独的 SIGCHLD 信号(可以合并信号的多个挂起实例),因此该技术并非完全可靠。如果您需要超过 8 位,最好找到另一种在进程之间传递值的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)