Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

따..딱히 공부하려고 포스팅하는 건 아니니까..!

[리눅스]프로그램 실행과 종료 본문

시스템|서버|네트워크

[리눅스]프로그램 실행과 종료

보즈리 2016. 4. 7. 14:58

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 시그널 종료


프로세스가 실행중에 시그널을 받으면 비정상적으로 종료하게 된다.

Comments