我需要捕获子进程的返回值..
问题是:使用 waitpid() 函数我只能捕获返回值的 8 位
WEXITSTATUS(wstatus) 返回子进程的退出状态。 这包括 孩子状态参数的最低有效 8 位 在对 exit(3) 或 _exit(2) 的调用中指定或作为参数指定 main() 中的 return 语句。 这个宏应该是 仅当 WIFEXITED 返回 true 时才雇用。
如何捕获从
main()
返回的完整 int 值?
编辑:Stackoverflow 迫使我编辑该问题,因为它链接了另一个已回答的问题,但与我的问题无关!
waitid
函数允许您检索进程的完整 (int
) 退出状态,作为其填充的 siginfo_t
结构的一部分。
POSIX 还要求,如果通过调用
si_status
(并在标志:
如果si_code等于CLD_EXITED,则si_status保存进程的退出值;否则,它等于导致进程改变状态的信号。si_status 中的退出值应等于完整退出值
(即传递给 _exit()、_Exit() 或 exit() 的值,或从 main() 返回的值);不限于该值的最低有效八位。
请参阅此处的测试程序(强调我的)。 请注意,经过测试,Linux 似乎不满足此要求,并且仅返回 si_status 成员中退出代码的低 8 位
。其他操作系统可能会正确返回完整状态; FreeBSD 确实如此。
。
但请注意,并不完全清楚您将为每个子进程终止收到一个单独的 SIGCHLD 信号(可以合并信号的多个待处理实例),因此该技术并非完全可靠。如果您需要超过 8 位,最好找到另一种在进程之间传递值的方法。 简短的回答是你几乎不能。 传统上,Unix/Linux 下进程的退出状态以 8 位值的形式传播。 您可以从
siginfo_t
返回任何您喜欢的整数,您可以使用您喜欢的任何整数调用
sigaction