반응형

우분투 리눅스에서는 프로그램이 종료된 리턴값을 확인하는 방법으로, echo $? 명령어를 사용할 수 있습니다.

쉘에서 명령어를 실행하면, 해당 명령어의 종료값(exit status)이 $? 라는 특별한 변수에 저장됩니다. 일반적으로 프로그램이 정상적으로 종료되면 0이라는 값이 리턴되고, 비정상적으로 종료되면 다른 값이 리턴됩니다. 이렇게 저장된 종료값은 echo 명령어를 사용하여 출력할 수 있습니다.

예를 들어, my_program 이라는 이름의 프로그램을 실행하고, 종료값을 확인하고자 할 때는 다음과 같이 입력합니다.

$ ./my_program
$ echo $?

 

위의 명령어를 실행하면, my_program이 종료된 이후에 해당 명령어의 종료값이 출력됩니다. 이 값을 보고 프로그램이 정상적으로 종료되었는지, 비정상적으로 종료되었는지 등을 판단할 수 있습니다.


리눅스에서, 일반적으로 프로그램이 정상적으로 종료될 때는 종료 코드(exit code) 0을 반환합니다. 그러나 종료 코드 141은 SIGPIPE 오류에 대한 종료 코드입니다.

SIGPIPE 오류는 파이프, 소켓 또는 FIFO 등의 통신 채널에서 데이터를 쓸 때, 해당 채널의 읽기 프로세스가 없거나, 이미 종료된 경우 발생할 수 있습니다. 이러한 경우 데이터를 쓰는 프로세스는 SIGPIPE 신호를 받게 되고, 해당 신호를 처리하지 않아서 프로그램이 비정상적으로 종료됩니다.

따라서, 프로그램이 종료 코드 141을 반환한다면, 해당 프로그램이 SIGPIPE 오류로 인해 비정상적으로 종료되었다는 것을 의미합니다.

 

exit status 값은 8비트(1바이트)로 제한되기 때문에, 시그널 값의 범위를 넘어서는 값이 exit status로 전달될 수 있습니다. 이 때는 시그널 번호에 128을 더한 값이 exit status 값으로 전달됩니다. 따라서 141은 시그널 번호인 13에 128을 더한 값으로, SIGPIPE 시그널의 발생을 나타내는 값입니다.

그러므로 프로그램의 exit status가 141인 경우, 해당 프로세스가 SIGPIPE 시그널을 받아서 종료되었음을 나타내는 것입니다.

 

 

 

반응형
Posted by Real_G