Raspberry Pi_Kor_10.7.4 “exit” 명령 – 처리 종료


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