C 程序分叉并等待 golang 进程状态



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));
}

相关内容

  • 没有找到相关文章

最新更新