我是fork
和exec
的新手,我尝试了以下计划。
计划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);
}
我运行第一个程序,输出是&#34;子进程以256&#34;退出。为什么结果为256
而不是1
?如果我将exit(1)
更改为exit(2)
,结果将变为512
,为什么会这样?它只有在我返回0时才有效。
答案 0 :(得分:3)
您从wait
系统调用中获取的状态值不一定是您的子进程退出的状态。
还可以返回许多其他信息,例如:
要提取退出代码,请使用宏:
WEXITSTATUS(status)
那个以及可以为您提供更多信息的宏应该可以在wait
手册页上找到,例如here。