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()

 

  1. atexit()에 등록된 함수들 실행한다.
  2. 열려있는 모든 입출력 버퍼 스트림 삭제한다. (stdin, stdout, stderr 등)
  3. 프로세스가 오픈한 파일들을 닫는다.
  4. 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이 아닌 값들이 출력된다.