当使用php-cli执行php脚本,正常结束时,exitCode=0, 非正常结束时,exitCode为1~255的值,这些值代表什么平时往往也不会太关注。但是笔者最近遇到一个问题,在php中不小心循环递归调用函数时,最终会出现segmentation fault (此处可以推测出进程收到SIGSEGV信号)。这个栈内存溢出错误,try catch不到,register_shutdown_function也hook不到, 只看到exitCode=139。所以,这时有必要了解一下exitCode代表的含义.
Exit Code Number | Meaning |
1 | 一般的错误,如除零错误等 |
2 | 缺少关键字或命令,或权限问题 |
126 | 权限问题或命令不是可执行文件 |
127 | "command not found" |
128 | exit($code), $code不是0~255时触发 |
128+n | n的值代表信号值, 本文遇到exitCode=139, 所以n=139-128=11, 代表信号:SIGSEGV |
130 | 被 Control-C终止,SIGINT=130-128, 符合上一条128+n |
255 | exit(-1),不是0~255则转为255 |
鉴于以上命令说明,在php-cli中,exit函数不能随意设置exitCode,否则容易和定义的exitCode规范混淆在一起。