一、什么是“现代守护进程”
现代守护进程的核心特征不是“一定要 double fork”,而是:
与控制终端彻底脱离
不再属于任何前台进程组
能在用户退出 / 终端关闭后继续运行
具备可预测的信号、文件描述符和运行环境
能被 init / systemd 正确管理(现代系统)
二、经典守护进程七步法(整体视图)
1. fork,父进程退出 2. setsid() 创建新会话 3. 再 fork(防止重新获得控制终端) 4. 修改工作目录 5. 重设文件权限掩码 umask 6. 关闭/重定向文件描述符 7. 初始化日志、信号、主循环下面逐步详解。
三、逐步详解(每一步“为什么”)
第 1 步:fork,父进程退出
pid_t pid = fork(); if (pid < 0) exit(1); if (pid > 0) exit(0); // 父进程退出