Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

종료 상태

C/C++ 프로그램은 반드시 main함수를 가지고 있어야 하는데, main 함수를 프로그램의 시작 위치로 특정하고 있기 때문이다. main 함수는 int형의 데이터를 반환할 수 있다.
int main(void)

이때 main 함수가 반환 하는 값은 프로세스의 종료 값으로, 이 프로세스를 실행한 부모 프로세스는 wait함수를 호출해서 종료 값을 확인할 수 있다.

예컨데, shell에서 우리는 특수 변수인 $?을 이용해서 자신이 실행한 프로그램의 반환 값을 확인할 수 있다. 만약 main 함수가 return 3을 반환한다면, 쉘에서의 확인 결과는 다음과 같을 것이다.
# ./mytest
# echo $?
3

종료 상태가 필요한 이유

프로세스는 계층적으로 실행할 수 있다. 예를 들어서 에서 which라는 프로그램을 실행했다면, 쉘 > which의 구조를 가질 것이다. - pstree(:2)프로그램을 이용하면 프로세스의 계층 구조를 확인할 수 있다. -

이런 프로세스(:12)의 계층 구조는 부모 프로세스자식 프로세스의 관계로 기술된다. 위의 경우 프로그램이 부모 프로세스가 되고 which가 자식 프로세스가 된다. 부모 프로세스는 자식 프로세스의 종료 상태를 확인해서 작업을 분기해야 하는 경우가 자주 생기는데, 이때 main 함수의 종료 상태 값을 이용한다.

아래는 mail 프로그램이 있는 지를 검사하는 프로그램이다. 이 프로그램은 mail 프로그램이 있으면 mail을 이용해서 메일을 전송하고, 없으면 sendmail을 이용해서 메일을 전송한다.
#!/bin/sh

which mail
RT=$?
if [ $RT -ne 0 ]
then
echo "Not Find Mail";
else
echo "Find Mail";
fi

종료 상태 값은 main 함수의 return 외에도 exit(:2) 함수의 값으로도 부모 프로세스에 전달할 수 있다.

관련 글