프로그램 실행 시작
exec 시스템을 호출하여 디스크에 있는 실행파일을 주기억장치로 올려 실행시킨다.
c 시작 루틴에 명령 줄 인수와 환경 변수 두가지 정보를 전달하고 프로그램을 실행시킨다.
c 컴파일러가 프로그램을 컴파일 할 때 메인 함수 말고 별도의 코드를 추가한다.
이것을 c start-up routine이라고 한다.
여기서 exec에서 받은 인자를 가지고 main 함수를 호출한다.
프로그램 종료
프로그램 종료는 정상 종료, 비정상 종료로 나누는데 이것은 커널의 입장에서 논한다.
정상 종료
main() 실행을 마치고 리턴하면 C 시작 루틴은 이 리턴값을 가지고 exit()을 호출
프로그램 내에서 직접 스스로 exit()을 호출
비정상 종료
exit을 부르지 않고 종료하는 것(ex-kill)
시그널에 의한 종료
=>프로세스를 주기억장치에 올려 놓은 다음 명령 줄 인수, 환경 변수를 C시작 루틴에게 넘김
C 시작 루틴이 시작되어 main 함수를 부르고 실행이 끝나면 다시 c시작 루틴에서 종료
커널에서 프로세스를 실행 시킬려면 디스크에서 읽어온 다음에 주기억장치에서 exec에 의해 적재한다.
C start-up 루틴에서 main을 실행한다.
함수들을 호출하고, 가장 정상적인 케이스로는 c start-up 루틴으로 돌아온다. 그리고 exit을 부른다.
아니면 main 함수내에서 사용자가 의도를 가지고 exit을 부를 수도 있다.
exit에서는 standard I/O cleanup을 한다. atexit으로 등록한 함수들을 차례로 불러주고 돌아온다.
이러한 과정을 뒷정리라고 한다.
그리곤 _exit을 불러 커널로 돌아간다. 결국 프로세스가 종료되는 마지막 시스템콜은 _exit이다.
'DEVOPS > LINUX' 카테고리의 다른 글
[Linux] 관리자 명령어 - 파일시스템 보안 (0) | 2024.07.30 |
---|---|
[Linux] 프로세스 ID (1) | 2021.12.04 |
[Linux] 프로세스 명령어(sleep, kill, exit) (0) | 2021.12.04 |
[Linux] 프로세스란?(+init프로세스) (0) | 2021.12.04 |
[Linux] 잠금(lock) (0) | 2021.12.04 |