使用exit(-1)为什么得到255退出码?
这篇讲的是一个常见的PHP陷阱:为什么在`exec()`函数中使用`exit(-1)`后,捕获到的返回值却是255。作者从微博上一个真实的开发者提问出发,揭示了这个现象背后的系统级原因。 问题的根因在于操作系统对进程退出码的处理方式。在Unix-like系统中,进程的退出码是一个8位的无符号整数(范围0-255)。当PHP执行`exit(-1)`时,-1在计算机中以二进制补码形式表示,其低8位恰好是全1,换算成十进制就是255。所以操作系统忠实地将这个值作为退出状态报告给了父进程。 文章没有止步于解释现象,而是给出了解决方案:要明确传递一个“失败”状态,应使用`exit(1)`(通用的错误码)或者显式地`exit(255)`。对于需要精细错误控制的场景,应查阅系统规范选择0-254之间的可用码。理解这一底层行为,能帮助开发者避免在脚本调用或进程间通信时被意外的返回值困扰,写出更健壮的代码。