2014-08-31 81 views
1

我是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時起作用。

回答

3

您從wait系統調用中獲得的狀態值不一定是您的子進程退出時的狀態值。

還有一些其他信息片斷,可也返回,如:

  • 沒有進程正常終止?
  • 是否被信號終止?
  • 終止它的信號是什麼?
  • 它轉儲核心?

爲了提取退出代碼,您可以使用宏:

WEXITSTATUS(status) 

這一點,可以給你更多的信息,應該是可用的wait手冊頁的宏,如一個here