Published Book on Amazon
All of IOT
Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 1 |
|
All of IOT
Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 2 |
출판된 한글판 도서
최신 라즈베리파이(Raspberry Pi)로 시작하는 사
물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (상) |
|
최신 라즈베리파이(Raspberry Pi)로 시작하는 사
물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (하) |
Original Book Contents
10.7.4 "exit" 명령 - 처리 종료
어떤 프로세스의 처리를 진행하던 중에 프로세스를 종료하고자 할 때 사용하는 것이 exit 명령이다.
[명령 형식]
exit [exit-status] |
[명령 개요]
■ 처리 중인 process를 종료하고, 지정된 값으로 exit status를 설정한다.
■ user 권한 -- 일반 user.
[상세 설명]
이 명령을 실행하면 현재의 프로세스는 처리를 즉시 중단한다. 만약 해당 프로세스를 호출한 parent process가 있다면, parent process에서 해당 프로세스를 호출한 다음 문장에서 처리를 계속하게 된다.
"exit" 명령에서는 status-number를 지정하여 처리상태를 되돌려 줄 수 있다. status-number를 지정하지 않으면 가장 최근에 실행한 Shell 명령이나 script에서 지정한 status-number가 그대로 사용된다.
Linux에서는 명령이나 script의 실행이 종료되면, 그 처리가 정상적으로 이루어졌는지를 나타내기 위해서 처리상태에 따라서 다양한 exit-status번호를 되돌려 준다. 이렇게 exit-status를 되돌려 주는 이유는 다음 단계의 작업에서 이전단계의 작업이 정상적으로 완료되었는지를 판단하고, 그 판단 결과에 따라서 적절하게 작업을 조정할 수 있도록 하기 위해서다.
exit-status에 대한 기본적인 원칙은 다음과 같다.
■ exit-status가 0인 경우는 정상적으로 처리된 것을 의미한다.
■ exit-status가 0이 아닌 경우는 정상적으로 처리되지 않은 것을 의미하며, 구체적인 값은 script나 명령에 따라서 달라진다.
기본적인 Shell의 exit code는 다음과 같다.
■ 0 : Successful completion of the command
■ 1 : General unknown error
■ 2 : Misuse of Shell command
■ 126 : The command can't execute
■ 127 : Command not found
■ 128 : Invalid exit argument
■ 128+x : Fatal error with Linux signal x
■ 130 : Command terminated with Ctrl-C
■ 255 : Exit status out of range
이전 실행에서 되돌려진 exit-status는 "$?" 변수를 이용해서 내용을 알 수 있다. "echo $?" 명령으로 그 내용을 화면에 출력할 수 있다. script에서 이 값을 이용하면, 그 상태에 따라서 처리를 다양하게 조정할 수도 있다.
[사용 Example]
다음에서는 여러 가지 Shell 명령을 실행할 경우에 exit-status가 어떻게 나오는지를 확인해 보겠다. 아래 사례는 명령이 정상적으로 처리된 경우이다. exit-status가 "0"으로 되어 있는 것을 알 수 있다.
pi@raspberrypi ~/Script $ ls -l |
total 28 -rwxr-xr-x 1 pi pi 261 Apr 30 15:48 test_case.sh -rwxr-xr-x 1 pi pi 133 Apr 30 17:29 test_for.sh -rwxr-xr-x 1 pi pi 94 Apr 30 17:21 test_if.sh -rwxr-xr-x 1 pi pi 158 Apr 30 16:55 test_until.sh -rwxr-xr-x 1 pi pi 158 Apr 30 16:47 test_while.sh |
pi@raspberrypi ~/Script $ echo $? |
0 |
아래 명령은 directory가 잘못된 것이다. exit-status가 "2"로 지정된 것을 알 수 있다.
pi@raspberrypi ~/Script $ ls /dddd |
ls: cannot access /dddd: No such file or directory |
pi@raspberrypi ~/Script $ echo $? |
2 |
아래 명령은 존재하지 않은 명령으로 인한 오류이다. exit-status가 "127"로 지정되어 있다.
pi@raspberrypi ~/Script $ sadf |
-bash: sadf: command not found |
pi@raspberrypi ~/Script $ echo $? |
127 |
다음 사례는 script에서 이전 처리의 결과를 확인하고, 그에 따라 처리를 조정하는 사례를 보기로 한다. 다음의 script를 작성하여 "test_while.sh" 파일에 저장하여 실행할 수 있도록 준비한다. 이 script에서는 의도적으로 exit 문에서 exit-status "3"를 되돌려 주고 있는 것으로 가정했다.
#! /bin/bash number =0 while [ number -le 4 ] ; do echo "number" $number number=$(( $number + 1 )) done echo "All is completed" exit 3 |
다음은 script 내부에서 위의 script를 실행하고 난 후 exit-status를 확인하고, 그에 따라 선택적으로처리를 조정하는 script이다.
#! /bin/bash
~/Scripts/test_while.sh
return_code=$?
if ( $ return_code = 0 ); then echo "while statement is OK" $return_code else echo "while statement is ERROR" $return_code fi |
이 명령을 처리해 보면 다음과 같은 결과가 나온다. 우리가 사전에 예상한 대로 exit-status "3"이 설정되어 있고 "ERROR"라는 메시지가 표시되었다.
pi@raspberrypi ~/Script $ ./test_exit.sh |
number 0 number 1 number 2 number 3 number 4 All is completed While statement is ERROR 3 |