Linux C 프로 세 스 와 다 중 스 레 드 입문 - (2) 프로 세 스 대기

3045 단어 linux
본문 은http://www.wenbanana.com/?p=363허수아비 블 로그, 방문 을 환영 합 니 다! 
문제.
         프로 세 스 를 만 드 는 이 절 내용 에서 메시지 의 출력 은 부자 프로 세 스 가 출력 을 교체 하고 부모 프로 세 스 가 하위 프로 세 스 전에 끝 나 는 것 을 보 았 습 니 다.부모 프로 세 스 를 하위 프로 세 스 가 끝 난 후에 끝 내 려 면wait 함 수 를 호출 할 수 있 습 니 다.
함수 설명
         pid_t wait(int * stat_loc)
        포 함 된 헤더 파일: \ # include < sys / types. h >
                                #include
       반환 값: 하위 프로 세 스 의 PID
        파라미터: statloc 는 빈 포인터 가 아 닙 니 다. 상태 정 보 는 가리 키 는 위치 에 기 록 됩 니 다.
        sys / wait. h 파일 사랑 하 는 상태 정 보 는 다음 표 참조:
     -----------------------------------------------------------------------------------------------------------------
       매크로 정의                                     설명 하 다.
     -----------------------------------------------------------------------------------------------------------------
       WIFEXITED(stat_val)            하위 프로 세 스 가 정상적으로 끝나 면 0 이 아 닌 값 을 가 져 옵 니 다.
       WEXITSTATUS(stat_val)     WIFEXITED 가 0 이 아니라면 하위 프로 세 스 의 종료 코드 를 되 돌려 줍 니 다.
       WIFSIGNALED(stat_val)      하위 프로 세 스 가 캡 처 되 지 않 은 신호 로 종료 되면 0 이 아 닌 값 을 가 져 옵 니 다.
       WTERMSIG(stat_val)         WIFSIGNALLED 가 0 이 아니라면 신호 코드 를 되 돌려 줍 니 다.
       WIFSTOPPED(stat_val)      하위 프로 세 스 가 종료 되면 0 이 아 닌 값 을 가 져 옵 니 다.
       WSTOPSIG(stat_val)           WIFSTOPPED 가 0 이 아니라면 신호 코드 를 되 돌려 줍 니 다.
     -----------------------------------------------------------------------------------------------------------------
        wait 시스템 호출 은 하위 프로 세 스 가 끝 날 때 까지 부모 프로 세 스 를 일시 정지 시 킵 니 다.
코드 인 스 턴 스
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>

int main(){
	pid_t pid;
	char * message;
	int n;
	int exit_code;
		
	printf("fork program starting
"); pid = fork(); switch(pid){ case -1: perror("fork failed"); exit(1); case 0: message ="This is the child"; n = 5; /* */ exit_code = 37; break; default: message = "This is the parent"; n = 3; /* */ exit_code = 0; break; } /*pid 0, */ if(pid){ int stat_val; pid_t child_pid; /* */ child_pid = wait(&stat_val); printf("Child process has finished: PID=%d
",child_pid); if(WIFEXITED(stat_val)) /* , , exit_code=37*/ printf("Child exited with code %d
", WEXITSTATUS(stat_val)); else /* */ printf("Child terminated abnormally
"); } for(; n > 0; n--){ puts(message); sleep(1); } exit(exit_code); }

부모 프로 세 스 는 wait 시스템 호출 을 통 해 하위 프로 세 스 의 상태 정보 가 나타 날 때 까지 실행 을 중단 합 니 다. 이것 은 하위 프로 세 스 가 exit 를 호출 할 때 발생 합 니 다. 종료 코드 를 37 로 설정 합 니 다.
그 다음 에 부모 프로 세 스 가 계속 실 행 됩 니 다. wait 호출 된 반환 값 을 테스트 하여 하위 프로 세 스 가 정상적으로 끝 났 는 지 확인 하고 상태 정보 에서 하위 프로 세 스 의 종료 코드 를 추출 합 니 다.
실행 효 과 는 다음 그림 참조:
참고 문헌: Linux 프로 그래 밍

좋은 웹페이지 즐겨찾기