2014-08-31 2 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 자식 프로세스 종료"입니다. 1 대신에 결과가 256 인 이유는 무엇입니까? exit(1)exit(2)으로 변경하면 결과는 512이됩니다. 그 이유는 무엇입니까?

답변

3

wait 시스템 호출에서 얻은 상태 값이 반드시 자녀 프로세스가 종료 한 값일 필요는 없습니다.

같은뿐만 아니라 반환 할 수있는 정보의 다른 조각들 중 하나입니다 :

  • 프로세스가 정상적으로 종료 않은가?
  • 신호로 종료 되었습니까?
  • 신호를 종료 한 신호는 무엇입니까?
  • 코어가 덤프 되었습니까? 그

    WEXITSTATUS(status) 
    

    , 그리고 더 많은 정보를 줄 수있는 wait 사람이 페이지에서 사용할 수 있어야 매크로 같은 :

  • 종료 코드를 추출하기 위해

, 당신은 매크로를 사용하여 그 중 하나는 here입니다.

관련 문제