따..딱히 공부하려고 포스팅하는 건 아니니까..!
[리눅스]프로그램 실행과 종료 본문
1. 프로그램 실행
exec() 시스템 호출에 의해서 프로그램이 실행된다.
<프로그램 실행의 시작>
1. exec() 시스템 호출에 의해 실행이 시작된다.
2. 프로그램 실행이 시작된다.
3. C 시작 루틴부터 시작하며, 이 시작 루틴은 main() 함수를 호출하고 명령줄 인수와 환경 변수를 main() 함수로 옮겨준다.
4. main() 함수를 반환하고 exit() 시스템 호출을 하여 종료한다.
명령줄 인수
명령어와 명령할 내용 등을 말한다.
<명령줄 인수 리스트 argv의 구성>
환경변수
실행파일의 경로정보, 파일이름을 말한다.
내부적으로 환경변수는 쉘이 원래 가지고 있던 것을 전역변수 environ을 통해 환경 변수와 값의 리스트를 포인터 배열 형태로 쉘이 실행하는 프로그램에 넘겨준다.
<환경 변수 리스트 environ의 구성>
2. 프로그램 종료
크게 정상 종료와 비정상 종료로 나눈다.
1) 정상 종료
1. C 시작 루틴에서 main()의 반환값을 가지고 exit()를 호출하는 방법
2. 프로그램 내에서 직접 exit()를 호출하는 방법
3. 프로그램 내에서 직접 _exit()를 호출하는 방법
exit()는 열린 스트림을 닫고 출력 버퍼의 내용을 디스크에 쓰는 등 뒷정리를 하지만
_exit()는 뒷정리를 하지 않고 즉시 종료한다.
하지만 프로세스의 종료 상태를 알리는 종료 코드를 부모 프로세스에게 보낸다는 점은 같다.
2) 비정상 종료
1. 시그널에 의한 종료
2. abort() 시스템 호출에 의한 SIGABRT 시그널 종료
프로세스가 실행중에 시그널을 받으면 비정상적으로 종료하게 된다.
'시스템|서버|네트워크' 카테고리의 다른 글
힙(Heap)과 스택(Stack)의 최대 할당 크기 (1) | 2016.06.15 |
---|---|
[리눅스]쉘(Shell) (0) | 2016.04.07 |
쓰레드 (0) | 2016.03.21 |
[리눅스]프로세스 제어 (프로세스 생성) (0) | 2015.04.30 |
vagrant와 윈도우즈 연결하기 (0) | 2015.01.14 |