꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

시스템 프로그래밍

프로세스 관리 - 프로세스 종료

gold_dragon 2021. 5. 6. 16:26

exit() 시스템 콜

exit() 시스템 콜은 인자로 status 정보를 넘겨줍니다. status란 프로세스 종료 상태 번호를 말합니다. 예로 0은 정상종료를 나타냅니다. 보통 비정상 종료를 할 때 exit() 시스템 콜을 사용합니다.

 

부모 프로세스는 status & 0377(비트 계산) 계산 값으로 자식 프로세스 종료 상태 확인이 가능합니다.

return 0;과 exit(0)의 차이

exit() 함수는 즉시 프로세스를 종료합니다. 다음에 있는 코드는 실행되지 않습니다. 'return 0'은 단지 main()이라는 함수를 종료합니다. main()에서 return 시, C 언어 실행 파일에 기본으로 포함된 _start() 함수를 호출하게 됩니다. 해당 함수는 결국 exit() 함수를 호출합니다.

exit() 시스템 콜 주요 동작

1. atexit()에 등록된 함수를 실행합니다.

2. 열려 있는 모든 입출력 스트림 버터를 삭제합니다. (stdin, stdout, stderr이 파일처럼 다뤄지는데 이러한 데이터를 다 지워줍니다.)

3. 프로세스가 오픈한 파일을 모두 닫습니다.

4. tmpfile() 함수를 통해 생성한 임시 파일을 삭제합니다.

atexit() 함수

프로세스 종료 시 실행될 함수를 등록하기 위해 사용합니다. 등록된 함수를 등록된 역순서대로 실행합니다.