프로세스 종료(exit)
exit() 시스템 콜
: 프로세스 종료
→ exit 인자로 status (프로세스 종료 상태를 나타내는 번호) 를 넘겨 준다. ( exit(0) => 0으로 넘겨주면 정상 종료 )
exit 함수는 비정상 종료할때 호출하는 것이 일반적.
C 언어에서 실행파일 종료 할때 return 0; 많이 쓰인다.
exit(0) 은 비정상적 종료일 때, 강제로 프로세스를 죽일 경우 사용된다.
운영체제에서 실행 할 때 _start() 라는 함수를 실행.
_start() 함수 안에 main 함수가 호출되도록 되어 있음.
main 함수로 호출하면 main 함수에 코드 주소를 가리키게 해서 메인 함수가 바로 실행 되는 것처럼 보임.
메인 함수에서 return 0 으로 끝나면 main 함수 밑에 있는 코드 실행하게 된다.
ext(0) 를 사용하면 코드는 실행되지 않고 곧바로 프로세스 종료하게 된다.
main 함수의 return = 0;과 exit(0); 의 차이는?
- exit() 함수 : 즉시 프로세스를 종료함 (exit() 함수 다음에 있는 코드는 실행되지 않음)
- return 0 : 단지 main이라는 함수를 종료함
→ main() 함수에서 리턴시, C 언어 실행파일에 기본으로 포함된 _start()함수를 호출하게 되고
해당 함수는 결국 exit() 함수를 호출함
→ main() 함수에서 return 0; 과 exit(0)은 큰 차이가 없음
부모 프로세스는 status & 0377(비트연산) 계산 값으로 자식 프로세스 종료 상태 확인 가능.
EXIT_SCUUESS 는 0 (숫자로 많이 쓰임) -> 정상 종료
EXIT_FAILUGE 는 1 ->비 성장 종료
exit() 시스템콜 주요동작
1. atexit()에 등록된 함수 실행
2. 열려 있는 모든 입출력 스트림 버퍼 삭제
→ stdin, stdout, stderr 이 3가지가 파일처럼 다뤄지는데 그 데이터를 모두 지워준다.)
3. 프로세스가 오픈한 파일을 모두 닫음
4. tmpfile() 함수를 통해 생성한 임시 파일 삭제 : exit 라는 시스템콜이 생성되면 임시 파일 삭제.
→ 참고: tmpfile() - 임시파일을 wb + (쓸 수 있는 이진파일 형태) 모드로 오픈 가능
atexit() 함수
- 프로세스 종료 시 실행될 함수를 등록하기 위해 사용
- 등록된 함수를 등록된 역순서대로 실행
atexit() 예제
제로베이스 컴퓨터 공학 전공자 따라잡기 강의 정리한 내용입니다.