2010-04-23 2 views
1

C와 프로세스에 관한 간단한 질문. 내 프로그램에서는 다른 하위 프로세스를 만들고 양방향 파이프를 사용하여 자식과 부모 간의 통신을 수행합니다. 자식은 execl()을 호출하여 또 다른 프로그램을 실행합니다.C에서의 프로세스 작업

제 질문은 : 부모님이 n 초를 기다렸다가 자식이 실행 한 프로그램이 종료되었는지 (그리고 어떤 상태로) 있는지 확인하겠습니다. waitpid()와 같은 것이지만 자식이 n 초 만에 종료되지 않으면 다른 것을하고 싶습니다.

답변

2

WNOHANG을 사용하여 SIGCHLD에 대한 신호 처리기를 폴링하거나 등록 할 수 있습니다.

+0

는 waitpid() 경로는 가장 좋은 것 같다 (비록 다중 스레드 환경에서이 방법을 사용하지 않음) N 초 후() waitpid를 방해 알람을 사용할 수 있습니다. 마지막 자식 프로세스의 종료 값을 얻기 위해 waitpid()를 사용할 수있는 방법이 있습니까? 자식이 종료 될 때 SIGCHLD가 콜백을 실행한다고 가정합니다. – Gary

1

당신은

signal(SIGALRM,my_dummy_handler); 
    alarm(10); 

    pid_t p = waitpid(...); 
    if(p == -1) { 
    if(errno == EINTR) { 
     //timeout occured 
     } else { 
     //handle other error 
    } 
+0

이것은 내가 쓴 것 같다 :) 유일한 문제는 프로세스가 끝나지 않으면 waitpid()가 실행되지 않는 코드가 실행되지 않는다는 것입니다. 이 문제를 어떻게 해결할 수 있습니까? – Gary

+0

또는 그것이 이해가되지 않는다면, 문제가되는 함수를 죽일 수 있도록 waitpid() 다음에 코드에 프로세스 컨트롤을 반환하고 싶습니다. – Gary