当前位置: 首页 > news >正文

Linux小课堂: 守护进程与初始化进程服务详解

进程基础概念


在 Linux 系统中,运行中的程序称为进程(Process),可通过以下命令查看进程信息:

  • 静态查看:ps -o ppid,pid,tty,cmd
    • PPID(Parent Process ID):父进程标识符
    • PID(Process ID):进程唯一标识符
    • TTY:关联的终端设备(如 pts/0
    • CMD:进程对应的程序名称
      示例输出:
    PPID   PID   TT      CMD  
    6650   6661  pts/0   bash  
    6661   27042 pts/0   ps -o ppid,pid,tty,cmd  
    
    此例中,ps 进程(PID=27042)的父进程是 bash(PID=6661),两者均关联终端 pts/0

动态查看:top 命令实时监控进程状态

关键细节:

  • 进程生命周期受父进程控制(父进程终止时,子进程自动销毁)
  • 终端关联进程(如 ps)随终端会话结束而终止

守护进程(Daemon)的核心特性


守护进程是 Linux 中的一类特殊后台进程,其特点包括:

1 ) 脱离终端控制:不与任何终端(如 TTY)关联

2 ) 持久化运行:在后台持续执行任务或等待事件触发,仅在系统关闭时终止,父进程为 PID=1 的初始化进程(仅系统关闭时终止)

3 ) 父进程固定:父进程为 PID=1 的初始化进程(如 systemd

4 ) 命名规范:名称通常以 d 结尾,表示 daemon(如 systemdhttpd),表示 Daemon

5 ) 服务化角色:多数服务器软件(如 Web 服务、文件共享)以守护进程形式运行,故也称为 Service(服务)

6 ) 后台服务:等待分配任务,为系统或用户提供功能(如网络服务)

7 ) 类比扩展:

  • Windows 中的等效概念为 Service(通过任务管理器或“服务管理”界面控制)
  • 守护进程在系统启动时自动加载,用户可通过命令手动启停或重启

Linux 初始化进程服务演进


1 ) 系统启动流程

  1. BIOS/UEFI 启动 → 2. Bootloader 加载内核 → 3. 内核初始化 → 4. 初始化进程启动(如 systemd) → 5. 系统服务初始化
初始化服务发行版时期核心工具
System VCentOS 6及之前service 命令
systemdCentOS 7+及主流发行版systemctl 命令

验证 PID=1 进程:

ps aux | grep '^systemd'  # 输出示例:  
root 1 0.0 0.1 169000 5000 ?    Ss   Jan01 0:01 /usr/lib/systemd/systemd  

2 ) 新旧初始化进程对比

功能新版(systemd)旧版(System V)
启动服务systemctl start <服务名>service <服务名> start
停止服务systemctl stop <服务名>service <服务名> stop
重启服务systemctl restart <服务名>service <服务名> restart
查看状态systemctl status <服务名>service <服务名> status
重载配置systemctl reload <服务名>service <服务名> reload

开机自启管理:

操作systemd 命令System V 命令
开机自启systemctl enable <服务名>chkconfig <服务名> on
禁用开机自启systemctl disable <服务名>chkconfig <服务名> off
查看自启服务列表systemctl list-unit-files --type=servicechkconfig --list
查看自启状态systemctl is-enabled <service>chkconfig --list <service>

注意:

  • System V 为 CentOS 6 及更早版本的默认初始化服务(如 init 进程)
  • systemd 从 CentOS 7 起成为主流,管理所有守护进程和系统服务

查看所有服务状态:

sudo systemctl list-unit-files --type=service  

输出示例:

UNIT FILE                     STATE  
httpd.service                 enabled  
smbd.service                  disabled  
... (共293个服务)  

STATE说明:

  • enabled:开机自启
  • disabled:开机不启动

3 ) 查看系统服务示例

sudo systemctl list-unit-files --type=service  

输出示例:

UNIT FILE                     STATE          
httpd.service                 enabled  
mysql.service                 disabled  
... (共 293 个服务)  

STATE 字段:

  • enabled:开机自启
  • disabled:开机不启动

关键命令操作与代码示例


1 ) 方案1

管理守护进程服务

查看 nginx 服务状态  
systemctl status nginx  设置 Docker 服务开机自启  
systemctl enable docker  重载修改后的配置(不重启服务)  
systemctl reload nginx  

创建自定义守护进程(NestJS + TypeScript)
以下代码实现一个简单的守护进程,脱离终端独立运行:

// daemon-process.ts  
import { spawn } from 'child_process';  
import { daemonize } from 'daemonize-process';  // 1. 脱离终端控制  
daemonize();  // 2. 持久化任务(示例:每 60 秒日志写入)  
setInterval(() => {  console.log(`[${new Date().toISOString()}] Daemon is running...`);  
}, 60_000);  // 3. 捕获异常防止退出  
process.on('uncaughtException', (err) => {  console.error('Daemon error:', err);  
});  

启动命令(后台运行):

nohup ts-node daemon-process.ts > /var/log/daemon.log &  

注册为 systemd 服务
创建服务配置文件 /etc/systemd/system/custom-daemon.service

[Unit]  
Description=Custom NestJS Daemon Service  [Service]  
ExecStart=/usr/bin/ts-node /path/to/daemon-process.ts  
Restart=always  
User=root  
WorkingDirectory=/path/to/app  [Install]  
WantedBy=multi-user.target  

启用服务:

systemctl daemon-reload  
systemctl enable custom-daemon  
systemctl start custom-daemon  

2 )方案2

NestJS服务作为systemd守护进程

步骤1:创建NestJS服务

// main.ts  
import { NestFactory } from '@nestjs/core';  
import { AppModule } from './app.module';  async function bootstrap() {  const app = await NestFactory.create(AppModule);  await app.listen(3000);  console.log('NestJS守护进程已启动,监听端口3000');  
}  
bootstrap();  

步骤2:配置systemd服务文件
创建 /etc/systemd/system/nest-app.service

[Unit]  
Description=NestJS Daemon Service  
After=network.target  [Service]  
User=nodeuser  
WorkingDirectory=/path/to/nest-app  
ExecStart=/usr/bin/npm run start:prod  
Restart=always  
RestartSec=3  [Install]  
WantedBy=multi-user.target  

步骤3:启用并启动服务

sudo systemctl daemon-reload  
sudo systemctl enable nest-app  # 开机自启  
sudo systemctl start nest-app   # 立即启动  
sudo systemctl status nest-app  # 验证状态  

核心总结

  1. 进程是 Linux 中运行程序的实例,通过 ps/top 查看。
  2. 守护进程(Daemon)是后台持久运行、脱离终端的特殊进程,为服务器核心组件。
  3. 初始化进程服务是系统启动的第一个进程(PID=1):
    • 旧版:System V(CentOS 6 及更早)
    • 新版:systemd(CentOS 7+ 及主流发行版),统一管理所有守护进程。
  4. systemd 核心命令:
    • 服务管理:systemctl start|stop|restart|reload <服务名>
    • 自启控制:systemctl enable|disable <服务名>
    • 状态查看:systemctl status <服务名>systemctl list-unit-files --type=service

技术要点凝练

  • 守护进程通过脱离终端 + 父进程托管至 PID=1 实现持久化
  • systemd 通过单元文件(.service)定义服务行为(如重启策略、工作目录)
  • 新旧服务命令需严格区分(如 systemctl vs service
http://www.dtcms.com/a/533230.html

相关文章:

  • synchronized 和 Lock
  • 2.2.1.2 大数据方法论与实践指南-基于飞书项目的项目管理规范
  • 做防腐木网站优秀网站设计流程
  • LangChain最详细教程之Model I/O(二)Prompt Template
  • STM32F103C8T6_UART串口通信完整教程
  • Gorm(一)查询方法
  • 网站管理工具wordpress中文版和英文版区别
  • 新网网站空间到期停了 咋续费北海哪里做网站建设
  • 百日挑战-单词篇(第四天)
  • 6.1 操作系统的启动流程
  • 英语学习 第四天
  • Compose笔记(五十四)--Card
  • 西宁电商网站制作公司北京广告设计招聘
  • 阿里巴巴网站建设销售软件商店下载最新版
  • 交流耦合和直流耦合
  • 印刷厂网站建设方案利用网上菜谱做网站
  • Flutter 中, Flame + flame_forge2d世界坐标和屏幕坐标对齐
  • 石家庄建站网页模板siteservercms做的网站在后台进行修改教程
  • 基于单片机的楼道声光人体红外智能控制灯设计
  • 做热处理工艺的网站有哪些苏州优化外包
  • 给网站怎么做tag标签网站优化公司免费咨询
  • 苏州专业做网站的公司有哪些杭州市优化服务
  • 5 Simplified LPDDR6 State Diagram(简化LPDDR6状态图)
  • 慈利做网站在哪里怎么做免费网站 视频
  • 怎么做赌钱网站网站备案现场
  • 通胀数据加强降息预期 金价周五收于4100美元之上
  • 高级机器学习作业(一)岭回归 + 信息熵 + Sigmoid + Softmax + PCA
  • 莱州网站建设关键字排名优化网络托管微信代运营wordpress 前台 插件
  • Python uv虚拟环境管理工具详解
  • 西安网站制作网站是如何设计配置方案的