컴퓨터 공부/Advanced UNIX System Programming

[5월 1일 3교시] 프로세스 제어 2

려리군 2009. 5. 1. 11:46

프로세스 종료

#include<stdlib.h>        // 표준라이브러리 종료

void exit(int status);      // 표준 입출력 정리 루틴(열린 파일들 fclose, 버퍼의 모든 데이터 flush)수행 후, _exit 호출


#include<unistd.h>       // 시스템 콜 종료

void _exit(int status);


기능 : 정상적인 종료를 처리한다.

status : 성공적인 수행이면 0, 오류 발생시 0이 아닌값


#include<stdlib.h>

void abort();          

기능 

 - 비정상적인 종료를 처리 : SIGABRT 시그널 발생

 - 커널이 종료 상태 값 생성.


프로세스에 대한 대기

#include<sys/types.h>

#include<sys/wait.h>

pid_t wait(int *status);

기능 : 자식 프로세스 중 하나를 기다린다.

pid_t waitpid(pid_t pid, int *status, int options);

기능 : 하나의 특정 자식 프로세스를 지정하여 기다린다.

옵션

 - WNOHONG : bloking을 방지.

 - WUNTRACED : 작업 제어 지원 시 잠시 중단된 경우도 리턴.

status

 - 자식이 exit함수 호출시 : [0~7:exit함수인자 | 8~15:0x00]

 - 시그널에 의해 종료시 : [0~7:0x00 | 8: 1 | 9~15: 시그널 번호]

 - SIGSTP 혹은 SIGSTOP에 의해 잠시 종료된 경우 : [0~7:시그널 번호 | 8~15: 0x7f]


#include<sys/types.h>

#include<sys/wait.h>

#include<sys/time.h>

#include<sys/resource.h>

pid_t wait3(int *statloc, int option, struct rusage *rusage);                    // wait와 비슷

pid_t wait4(pid_t pid, int *statloc, int options, struct rusage *rusage);    // waitpid와 비슷

 - 자식 프로세스가 사용한 자원에 대한 정보를 rusage에 보냄.

 - BSD에서 제공


고아 프로세스 : 자식 프로세스가 종료하기 전에 부모 프로세스가 수행을 마친 경우.

좀비 프로세스 : 부모 프로세스의 wait처리가 끝나지 않은 프로세스

경쟁조건 : 공유 자원에 대해 작업을 수행하려고 할 때 수행 결과는 프로세스의 실행 순서에 따라 다름.

 - 해결책 :  프로세스간 통신(IPC, signal), 자원 잠금.