IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:exec

共 2 篇相关文章

IT 累计浏览 2,113

使用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之间的可用码。理解这一底层行为,能帮助开发者避免在脚本调用或进程间通信时被意外的返回值困扰,写出更健壮的代码。

IT 累计浏览 3,290

进程的一生

这篇讲的是Linux内核中进程如何从fork创建、exec变身,到最终退出回收的完整生命周期。作者从内核实现的角度,清晰地串联起了一个进程从诞生到消亡的全流程。 文章不仅描述了fork创建子进程这一经典场景,更深入剖析了随后的exec家族函数如何为进程“换上新装”,执行不同的程序文件。其核心在于解释内核如何通过描述符、信号、内存映射等机制,来管理这个不断变化中的实体。例如,它解释了进程状态(如就绪、运行、阻塞)的转换逻辑,以及父进程如何通过wait系统调用来收割子进程的“遗产”,避免成为孤儿或僵尸进程。 作者将分散的内核知识点,围绕“一生”这条时间线有机地组织起来,让抽象的进程管理概念变得连贯且易于理解。对于想从底层机制上搞明白“一个程序运行起来到底发生了什么”的开发者,这篇文章提供了一份非常清晰的路线图。