子进程的返回值

时间:2014-08-31 07:27:15

标签: c++ exec fork wait waitpid

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

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

1 个答案:

答案 0 :(得分:3)

您从wait系统调用中获取的状态值不一定是您的子进程退出的状态。

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

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

要提取退出代码,请使用宏:

WEXITSTATUS(status)

那个以及可以为您提供更多信息的宏应该可以在wait手册页上找到,例如here