一个echo引起的进程崩溃
这篇讲的是一个后台进程因简单 `echo` 语句而意外崩溃的真实案例。作者发现,通过 `&` 方式后台执行的PHP脚本,在SSH连接断开后常常莫名“死亡”,后续代码无法执行。 通过 `strace` 追踪系统调用,问题清晰浮现:进程尝试向标准输出(stdout)执行写操作(即 `echo`)时,返回了 `EIO`(输入/输出错误)。其根源在于Linux的会话管理机制——当用户SSH登录时,标准输入/输出/错误会绑定到一个伪终端(pty);而一旦退出登录,该终端的句柄会被置为不可读写状态。此时,后台进程若再向其写入,就会触发I/O错误,导致进程直接终止。 文章指出了两种有效的规避方法:一是使用 `> /dev/null 2>&1` 将输出重定向到空设备;二是推荐使用 `nohup` 命令运行进程,使其免疫终端信号的干扰。这个案例生动地提醒我们,在开发守护进程或长期运行任务时,妥善处理标准I/O流至关重要。