linux c守护进程

在 Linux 中,守护进程(Daemon)是指在后台运行、不与用户交互的进程。它们通常通过 systemdinit(如 SysVinit)或 supervisord 等系统服务管理。

下面我将从 原理、创建方式、管理方式 和 常用工具 四个方面来解释 Linux 中的守护进程。

一、守护进程的原理

守护进程是在系统启动时自动运行的进程,通常:

不与用户交互 通过标准输入/输出(stdin/stdout/stderr)与系统通信 通常使用 fork() 创建子进程,以避免阻塞主线程 通常会监听某个端口或使用 socket 与外界通信

二、守护进程的创建方式

1. 使用 nohup 启动守护进程

nohup python my_script.py > output.log 2>&1 &
nohup:让进程在后台运行,即使用户退出终端也不会终止 > output.log:将标准输出重定向到文件 2>&1:将标准错误输出也重定向到标准输出 &:将进程放到后台运行

2. 使用 systemd 创建服务(推荐)

[Unit]
Description=My Daemon Service

[Service]
ExecStart=/usr/bin/python3 /path/to/my_script.py
WorkingDirectory=/path/to/
StandardOutput=syslog
StandardError=syslog
Restart=on-failure

[Install]
WantedBy=multi-user.target

然后执行:

sudo systemctl enable my_daemon.service
sudo systemctl start my_daemon.service

3. 使用 init.d(SysVinit)创建服务

sudo nano /etc/init.d/my_daemon
#!/bin/bash
case  + #引号 + $1 + #引号 +  in
  start)
    echo  + #引号 + Starting my daemon... + #引号 + 
    sudo systemctl start my_daemon
    ;;
  stop)
    echo  + #引号 + Stopping my daemon... + #引号 + 
    sudo systemctl stop my_daemon
    ;;
  restart)
    sudo systemctl restart my_daemon
    ;;
  *)
    echo  + #引号 + Usage: $0 {start|stop|restart} + #引号 + 
    exit 1
esac
exit 0

然后启用并启动服务:

sudo update-rc.d my_daemon defaults
sudo systemctl enable my_daemon
sudo systemctl start my_daemon

三、守护进程的管理方式

1. 使用 systemctl(推荐)

sudo systemctl status my_daemon
sudo systemctl restart my_daemon
sudo systemctl stop my_daemon
sudo systemctl enable my_daemon

2. 使用 ps 查看进程

ps aux | grep my_daemon

3. 使用 tophtop 管理进程

top -p <pid>

四、常用守护进程工具

工具 描述 systemd 系统和服务管理工具,推荐用于现代 Linux 发行版 supervisord 用于管理多个进程的守护进程 nohup 用于在后台运行进程,即使用户退出终端也不终止 init 旧式 SysVinit 系统的守护进程管理工具

五、示例:使用 supervisord 管理守护进程

1. 安装 supervisord

sudo apt install supervisor  # Debian/Ubuntu
sudo yum install supervisor  # CentOS/RHEL

2. 创建 supervisord 配置文件

[supervisord]
; 系统服务管理
; 启动所有服务
; 管理多个进程

[program:my_daemon]
; 进程名称
command=/usr/bin/python3 /path/to/my_script.py
; 工作目录
directory=/path/to/
; 日志文件
stdout=log_file.txt
stdout.flushInterval=10
; 重试策略
stdout_logfile_maxsize=1024
; 重启策略
autostart=true
autorestart=true
starttimeout=5
stopsignals=INT

3. 启动 supervisord

sudo supervisord

总结

类型 描述 常用工具 守护进程 在后台运行的进程 systemd, supervisord, nohup, init.d 管理方式 通过命令行或服务管理 systemctl, ps, top 工具推荐 systemd 是现代 Linux 的首选 systemd, supervisord

如需进一步了解某个工具或具体实现,欢迎继续提问!

文章转自:[明日方舟 ] (https://www.52mwyd.com/news/19423.html)

作者:游戏攻略,转载请注明原文链接:https://www.52mwyd.com/

posted @ 2025-11-19 08:11  球球8688  阅读(0)  评论(0)    收藏  举报