주로 POSIX OS 밑에서 프로그램을 작성할 때 에러가 나면 메인 함수에서는 return -1;, 다른 함수에서는 exit(-1);을 쓰는 경우를 굉장히 자주 목격할 수 있습니다. 단언하자면 이건 틀렸으며 사용하지 말아야 합니다. 전부 -11로 바꿔야 합니다.

아래는 표준 exit code들에 대한 설명입니다1.

1 : Catchall for general errors
2 : Misuse of shell builtins
126 : Command invoked cannot execute
127 : Command not found
128 : Invalid argument to exit
128+n : Fatal error signal “n”
130 : Script terminated by Control-C
255* : Exit status out of range
*: 255를 넘어가는 exit code에 대해서는 mod256을 적용해 0-255 범위에 맞춘다.

우리가 늘상 써왔던 웬만한 모든 종류에 대한 에러를 위한 exit code는 보시다시피 1입니다. 그렇다면 -1을 리턴하면 어떻게 될까요?
주석에 쓰인대로 mod256을 해서 0-255 범위로 맞춘다고 되어 있는데 다시 말해서 최하위 1바이트만 남기고 나머지는 다 버린다는 뜻입니다. -10xffffffff처럼 표기되죠? 1바이트만 남으면 0xff가 되고 255 = Out of range 코드가 된다는 뜻입니다. 한마디로 올바르지 않은 exit code인 것이죠.


  1. https://tldp.org/LDP/abs/html/exitcodes.html