1

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

方案一:

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

方案二:

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 时它才有效。

4

1 回答 1

3

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

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

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

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

WEXITSTATUS(status)

那以及可以为您提供更多信息的宏应该在wait手册页上可用,例如此处的那个。

于 2014-08-31T07:35:03.037 回答