computer
프로세스 종료: exit
유순이
2021. 7. 6. 08:04
void exit(int status);
main 함수의 return 0;과 exit(0)의 차이점
return 0
: main()함수를 종료한다.
exit(0) - 정상 종료 (비정상 종료 시에)
: 즉시 프로세스를 종료한다. (이후의 코드들은 실행하지 않는다.)
main()이 리턴되면, C언어에 내장되어 있는 _start 함수가 실행이 되고, 결국 exit가 실행된다.
exit()
- atexit()에 등록된 함수들 실행한다.
- 열려있는 모든 입출력 버퍼 스트림 삭제한다. (stdin, stdout, stderr 등)
- 프로세스가 오픈한 파일들을 닫는다.
- tmpfile()을 통해 생성한 임시파일을 삭제한다.
atexit()
프로세스가 종료될 때 실행할 함수들을 등록하는 함수
등록된 순서의 역순으로 실행
exit(int status) 는 child process가 실행
pid_t wait(int *status) 는 parent process가 실행
//리턴 값은 종료된 childe process's pid
여기서 *status는 해당 메모리 공간을 만들어 놓고 child process가 그 값을 던지게 된다.
int WIFEXITED(status)
: child process가 정상적으로 종료되었다면 0이 아닌 값들이 출력된다.