C 程序:
pid = fork();
if (pid == 0) {
execv("Golang Process");
} else (pid > 0) {
wait(&status);
printf("process %d status: %dn", pid);
}
戈朗计划:
func main() {
......
os.Exit(1)
}
但是,输出是:进程XXX状态:256
如果设置操作系统。退出(2),输出为:进程 XXX 状态:512
如果设置操作系统。退出(3),输出为:进程 XXX 状态:768
为什么?
请参阅wait
手册:
如果状态不是 NULL,则
wait()
并waitpid()
存储状态信息 在它指向的 int 中。可以使用 以下宏(将整数本身作为参数,而不是 指向它的指针,就像在wait()
和waitpid()
中所做的那样!
WIFEXITED(status)
返回true
如果子项正常终止,则 是,通过呼叫exit(3)
或_exit(2)
,或从main()
返回。
WEXITSTATUS(status)
返回子项的退出状态。这 由状态参数的最低有效 8 位组成 在呼叫exit(3)
或_exit(2)
中指定的子项,或作为main()
中返回语句的参数。此宏应仅 如果WIFEXITED
返回true
就就业。
您的问题与 golang 无关,您只需使用这些宏来提取状态代码:
if (WIFEXITED(status)) {
printf("process %d status: %dn", pid, WEXITSTATUS(status));
}