CS/시스템 프로그래밍

프로세스 종료(exit)

:_: 2022. 3. 2. 16:45

 

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

 

 

제로베이스 컴퓨터 공학 전공자 따라잡기 강의 정리한 내용입니다.
728x90