프로세스 종료
#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), 자원 잠금.
'컴퓨터 공부 > Advanced UNIX System Programming' 카테고리의 다른 글
[5월 6일 2교시] 프로세스 제어 4 + 시스템 정보 1 (0) | 2009.05.06 |
---|---|
[5월 6일 1교시] 프로세스 제어 3 (0) | 2009.05.06 |
[5월 1일 2교시] 프로세스 제어 1 (0) | 2009.05.01 |
[5월 1일 1교시] 메모리 관리 (0) | 2009.05.01 |
[4월 30일 3교시] 프로세스2 (0) | 2009.04.30 |