시스템 프로그래밍 - 프로세스 종료
1. 리눅스 프로세스 종료
1) 프로그램 종료 함수의 일반적 종료 절차
- 모든 파일 기술자를 닫음
- 부모 프로세스에 종료 상태를 알림
- 자식 프로세스들에 SIGHUP 시그널을 보냄
- 부모 프로세스에 SIGCHLD 시그널을 보냄
- 프로세스간 통신에 사용한 자원을 반납함
2) 프로세스 종료 특징
- 프로세스가 마지막 명령 실행, 종료하여 운영체제에 프로세스의 삭제 요청
- abort 명령어로 프로세스 종료
- 부모 프로세스의 자식 프로세스 종료
- exit 명령어 : 유닉스에서 프로세스 종료
- wait 명령어 : 부모 프로세스가 자식 프로세스의 종료 기다림
- 프로세스 종료 이유
(3-1)
- 보통 부모 프로세스 종료하면 운영체제가 자식 프로세스도 종료(연속 종료)
- 자식 프로세스가 할당된 자원을 초과하여 자원을 사용할 때
- 자식 프로세스에 할당한 작업이 더는 없을 때
(6-1)
- 정상 종료 : 프로세스가 운영체제의 서비스 호출
- 시간 초과
- 실패 : 파일 검색 실패, 입출력이 명시된 횟수 초과하여 실패할 때
- 산술 오류, 보호 오류, 데이터 오류 등, 메모리 부족, 액세스 위반 등
2. 리눅스 프로세스 종료 함수
1) 프로그램 종료 함수
프로세스 종료 : void exit(int status);
void _exit(int status);
종료시 수행할 작업 지정 : int atexit(void (*func)(void));
(1) 프로그램 종료 : exit(2)
#include <stdlib.h>
void exit(int status);
(2) 프로그램 종료시 수행할 작업 예약 : atexit(2)
#include <stdlib.h>
int atexit(void (*func)(void));
- func : 종료시 수행할 작업을 지정한 함수명
(3) 프로그램 종료 : _exit(2)
#include <unistd.h>
void _exit(int status);
- 일반적으로 프로그램에서 직접 사용하지 않고 exit 함수 내부적으로 호출
댓글남기기