在 Linux 中,“启动守护进程(daemon)”通常有几种常见方式,取决于你是自己写一个守护进程、还是启动系统已有的服务。下面分场景说明。
大多数发行版(Ubuntu 16.04+、CentOS 7+)都使用 systemd。
# 启动服务
sudo systemctl start nginx
# 设置开机自启
sudo systemctl enable nginx
# 查看状态
sudo systemctl status nginx
服务配置文件一般在:
/etc/systemd/system/
/usr/lib/systemd/system/
sudo service nginx start
# 或
sudo /etc/init.d/nginx start
& 后台运行(简单但不规范)./my_program &
缺点:
nohupnohup ./my_program > output.log 2>&1 &
适合临时运行。
setsid(真正脱离终端)setsid ./my_program > output.log 2>&1 < /dev/null &
关键步骤:
fork()setsid()简化示例:
#include <unistd.h>
#include <stdlib.h>
int main() {
if (fork() > 0) exit(0);
setsid();
chdir("/");
freopen("/dev/null", "r", stdin);
freopen("/dev/null", "w", stdout);
freopen("/dev/null", "w", stderr);
while (1) {
sleep(10);
}
}
import daemon
import time
with daemon.DaemonContext():
while True:
time.sleep(10)
| 场景 | 推荐方式 |
|---|---|
| 系统服务 | systemd |
| 临时后台任务 | nohup / setsid |
| 自写守护进程 | systemd 或 daemon 库 |
| 老系统 | init.d |
如果你能告诉我:
我可以给你更具体、可直接复制的命令。