gpt4 book ai didi

c++ - 子进程的返回值

转载 作者:行者123 更新时间:2023-11-30 02:44:06 30 4
gpt4 key购买 nike

我是 forkexec 的新手,我尝试了以下程序。

程序 1:

int main(int argc, char *argv[]){
pid_t pid;
int status;
pid = fork();
if(pid == 0){
printf("new process");
execv("p1",argv);
}
else{
pid_t pr = wait(&status);// I am trying to get the exit value
// of the sub process.
printf("the child process exit with %d",status);
printf("father still running\n");
}
}

程序 2:

int main(){
std::cout<<"I am the new thread"<<std::endl;
sleep(1);
std::cout<<"after 1 second"<<std::endl;
exit(1);
}

我运行第一个程序,输出是“子进程以 256 退出”。为什么结果是 256 而不是 1?如果我将 exit(1) 更改为 exit(2),结果将变为 512,这是为什么呢?只有当我返回 0 时它才有效。

最佳答案

您从 wait 系统调用返回的状态值不一定是您的子进程退出时的值。

还有许多其他信息也可以返回,例如:

  • 进程是否正常终止?
  • 它是否被信号终止了?
  • 终止它的信号是什么?
  • 它是否转储核心?

为了提取退出代码,您使用宏:

WEXITSTATUS(status)

那个,以及可以给你更多信息的宏,应该在 wait 手册页上可用,例如 here。 .

关于c++ - 子进程的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25589841/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com