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

《Linux基础知识-2》

Linux基础知识-2

4. Linux 进程管理

进程管理是 Linux 系统管理中至关重要的一部分,涉及监控、控制和优化系统中运行的各类进程。有效的进程管理不仅能提升系统性能,还能确保系统的稳定性和安全性。以下将详细介绍 Linux 进程管理的各个方面,并通过具体示例加以说明。

4.1 进程概念与生命周期

理解进程的基本概念和生命周期,对于有效地管理和控制系统中的任务至关重要。

4.1.1 什么是进程?
定义与基本概念

进程是操作系统中程序执行的实例。它是系统进行资源分配和调度的基本单位,每个进程都有自己的地址空间、执行代码、数据、文件描述符和其他资源。进程可以看作是一个正在运行的程序,具有独立的执行流和生命周期。

基本特点:

  • 独立性:每个进程独立运行,拥有自己的内存空间。
  • 动态性:进程在生命周期中会经历创建、执行、等待和终止等状态。
  • 并发性:多个进程可以同时在系统中运行,提高资源利用率。
  • 异步性:进程的执行顺序不固定,取决于调度策略和系统资源。
进程与线程的区别

进程线程都是操作系统中执行任务的基本单位,但它们有以下区别:

特性 进程 线程
独立性 高,每个进程有独立的内存空间 低,同一进程的线程共享内存空间
资源消耗 较大,需要独立的资源 较小,共享进程的资源
通信方式 通过进程间通信(IPC)进行 通过共享内存进行
创建与销毁 相对复杂且耗时 简单且快速
崩溃影响 可能影响整个进程 只影响当前线程,不影响同一进程的其他线程

示例:

假设有一个 Web 服务器程序,该程序可以启动多个进程或线程来处理多个客户端请求。

  • 多进程模式:每个客户端请求由一个独立的进程处理,进程之间相互独立,互不干扰。
  • 多线程模式:所有客户端请求由多个线程在同一进程中处理,线程之间共享内存,通信更高效,但一个线程的崩溃可能影响整个进程。
进程的资源与隔离

每个进程在系统中运行时,会占用一定的资源,包括:

  • CPU 时间:用于执行进程的指令。
  • 内存:进程的代码段、数据段和堆栈。
  • 文件描述符:用于访问文件、设备和网络资源。
  • 信号:用于进程间的通信和控制。

资源隔离确保了一个进程无法直接访问或修改另一个进程的资源,增强了系统的稳定性和安全性。操作系统通过内存管理和权限控制来实现资源隔离。

示例:

用户 alice 启动了一个文本编辑器进程 gedit,该进程只能访问和修改用户 alice 的文件,无法直接访问其他用户的文件或系统关键文件。

4.1.2 进程的状态与 PID
进程状态(运行、睡眠、停止、僵尸)

进程在其生命周期中会经历不同的状态:

  • 运行(Running):进程正在使用 CPU 或准备使用 CPU。
  • 可中断睡眠(Interruptible Sleep):进程等待某个事件(如 I/O 完成),可以被信号中断。
  • 不可中断睡眠(Uninterruptible Sleep):进程等待某个事件,无法被信号中断,通常用于等待硬件事件。
  • 停止(Stopped):进程被信号暂停,通常由调试工具或用户发送。
  • 僵尸(Zombie):进程已终止,但其父进程尚未回收其资源。

状态转移示例:

  1. 创建:进程被创建,进入运行状态。
  2. 等待:进程执行过程中需要等待某些事件,进入睡眠状态。
  3. 唤醒:事件发生,进程被唤醒,重新进入运行状态。
  4. 终止:进程完成任务,进入僵尸状态,等待父进程回收资源。
进程标识符(PID)与父进程ID(PPID)

每个进程在系统中都有一个唯一的 进程标识符(PID),用于标识和管理进程。父进程ID(PPID) 是创建该进程的父进程的 PID。

示例:

用户 alice 启动一个终端,终端进程的 PID 为 1000。在该终端中启动一个 gedit 进程,gedit 的 PID 为 1001,其 PPID 为 1000

查看进程的 PID 和 PPID:

ps -ef | grep gedit

输出示例:

alice     1001  1000  0 Apr27 ?        00:00:05 gedit
  • 1001:PID
  • 1000:PPID
查看进程状态的工具(ps, top, htop

1. ps 命令

ps(process status)用于显示当前系统中的进程信息。

基本用法:

ps

常用选项:

  • ps aux:显示所有用户的所有进程,详细信息。
  • ps -ef:类似于 ps aux,使用不同的格式。

示例:

ps aux | grep ssh

输出示例:

root       1320  0.0  0.1  22500  4100 ?        Ss   Apr27   0:01 /usr/sbin/sshd
alice     1450  0.0  0.2  32768  8200 pts/0    Ss   Apr27   0:00 bash
alice     1500  0.0  0.1  35600  4200 pts/0    R+   Apr27   0:00 ps aux
alice     1501  0.0  0.0  10320   840 pts/0    S+   Apr27   0:00 grep ssh

2. top 命令

top 提供实时的进程信息和系统资源使用情况,适用于监控和管理系统性能。

基本用法:

top

3. htop 命令

htoptop 的增强版,提供更友好的界面和更多的交互功能。需要手动安装。

安装 htop

sudo apt-get install htop      # Debian/Ubuntu
sudo yum install htop          # CentOS/RHEL
sudo pacman -S htop            # Arch Linux

基本用法:

htop

界面优势:

  • 彩色显示,易于阅读。
  • 支持鼠标操作。
  • 提供更多的排序和筛选选项。

4.2 查看进程信息

查看和分析进程信息是进程管理的基础,帮助系统管理员了解系统状态、资源使用和潜在的问题。

4.2.1 ps - 显示当前进程

ps 命令用于显示系统中的当前进程信息,支持多种选项和格式。

基本用法

命令语法:

ps [options]

示例:

显示当前用户在当前终端中的进程:

ps

输出示例:

  PID TTY          TIME CMD1450 pts/0    00:00:00 bash1500 pts/0    00:00:00 ps
常用选项(如 ps aux, ps -ef

1. ps aux

显示所有用户的所有进程,包含详细信息。

命令:

ps aux

输出示例:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  22500  4100 ?        Ss   Apr27   0:01 /sbin/init
root       1320  0.0  0.1  22500  4100 ?        Ss   Apr27   0:01 /usr/sbin/sshd
alice     1450  0.0  0.2  32768  8200 pts/0    Ss   Apr27   0:00 bash
alice     1500  0.0  0.1  35600  4200 pts/0    R+   Apr27   0:00 ps aux
alice     1501  0.0  0.0  10320   840 pts/0    S+   Apr27   0:00 grep ssh

2. ps -ef

类似于 ps aux,使用不同的格式显示所有进程。

命令:

ps -ef

输出示例:

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Apr27 ?        00:01:00 /sbin/init
root      1320     1  0 Apr27 ?        00:01:00 /usr/sbin/sshd
alice     1450  1320  0 Apr27 pts/0    00:00:00 bash
alice     1500  1450  0 Apr27 pts/0    00:00:00 ps -ef
alice     1501  1500  0 Apr27 pts/0    00:00:00 grep ssh
输出格式与解释

ps auxps -ef 提供的输出包含多个字段,每个字段代表进程的不同属性。

常见字段解释:

  • USER:进程所有者。

  • PID:进程标识符。

  • %CPU:进程使用的 CPU 百分比。

  • %MEM:进程使用的内存百分比。

  • VSZ:进程使用的虚拟内存大小(KB)。

  • RSS:进程使用的实际物理内存大小(KB)。

  • TTY:进程关联的终端。

  • STAT

    :进程状态代码。

    • R:运行
    • S:睡眠
    • D:不可中断睡眠
    • T:停止
    • Z:僵尸
  • START:进程启动时间。

  • TIME:进程使用的累计 CPU 时间。

  • COMMAND:启动进程的命令及参数。

示例:

ps aux | grep nginx

输出示例:

root      2001  0.0  0.1  50000  3000 ?        Ss   Apr27   0:00 nginx: master process /usr/sbin/nginx
www-data 2002  0.0  0.2  60000  4000 ?        S    Apr27   0:00 nginx: worker process
www-data 2003  0.0  0.2  60000  4000 ?        S    Apr27   0:00 nginx: worker process
4.2.2 top - 实时查看系统资源

top 提供实时的系统资源使用情况和进程信息,是监控系统性能的重要工具。

基本用法

命令:

top

启动界面示例:

top - 10:30:15 up 5 days,  3:45,  2 users,  load average: 0.15, 0.10, 0.05
Tasks: 150 total,   1 running, 149 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.0 us,  1.0 sy,  0.0 ni, 96.0 id,  1.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7972.0 total,   1200.0 free,   3000.0 used,   3772.0 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   4000.0 avail MemPID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND1500 alice     20   0  35600   4200   840 R   0.0  0.1   0:00.00 ps1501 alice     20   0  10320    840    560 S   0.0  0.0   0:00.00 grep
界面与交互操作

top 的交互界面中,可以通过键盘命令执行多种操作:

  • P:按 CPU 使用率排序。
  • M:按内存使用率排序。
  • T:按运行时间排序。
  • k:杀死进程,需要输入 PID。
  • r:改变进程优先级(renice)。
  • q:退出 top

示例操作:

  1. 按内存使用率排序:

    M 键,将进程按内存使用率从高到低排序。

  2. 杀死一个进程:

    k 键,输入目标进程的 PID,例如 1501,并按回车。

  3. 更改进程优先级:

    r 键,输入目标进程的 PID,例如 1500,然后输入新的优先级值(例如 10)。

自定义显示内容(排序、过滤)

top 允许用户自定义显示内容,以更好地监控特定的进程或资源。

常用自定义操作:

  • 添加/移除列:

    f 键,进入字段管理界面,可以添加或移除显示的列。

  • 更改排序列:

    o 键,输入要排序的字段名称,例如 %CPU%MEM

  • 筛选进程:

    / 键,输入要筛选的关键词,例如 ssh,仅显示包含该关键词的进程。

示例操作:

  1. 添加 COMMAND 列:

    f 键,使用箭头键导航到 COMMAND,按 d 键添加该列。

  2. %MEM 排序:

    o 键,输入 %MEM,按回车。

  3. 筛选显示 bash 相关进程:

    / 键,输入 bash,按回车。

4.2.3 htop - 更友好的进程监控工具

htoptop 的增强版,提供更直观的界面和更多的功能,适用于需要更高效和友好的进程监控的场景。

安装与基本用法

安装 htop

sudo apt-get install htop      # Debian/Ubuntu
sudo yum install htop          # CentOS/RHEL
sudo pacman -S htop            # Arch Linux

启动 htop

htop
界面优势与功能

htop 提供彩色显示、图形化的 CPU 和内存使用情况、更直观的进程树、支持鼠标操作等优势。

界面示例:

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command1500 alice      20   0 35600  4200   840 R  0.0  0.1   0:00.00 ps aux1501 alice      20   0 10320   840   560 S  0.0  0.0   0:00.00 grep ssh
常用快捷键与操作
  • F1:帮助。
  • F2:设置。
  • F3:搜索。
  • F4:筛选。
  • F5:树状视图。
  • F6:选择排序列。
  • F9:杀死进程。
  • F10:退出 htop

示例操作:

  1. 搜索进程:

    F3 键,输入 nginx,按回车,htop 将高亮显示包含 nginx 的进程。

  2. 杀死进程:

    使用箭头键选中目标进程,按 F9,选择信号(如 SIGTERM),按回车终止进程。

  3. 切换到树状视图:

    F5 键,htop 将以树状结构显示进程,便于查看父子进程关系。

4.2.4 pgrep - 根据名称查找进程

pgrep 是一个用于根据名称或其他属性查找进程的命令,返回匹配进程的 PID。它简化了进程查找和管理的过程。

基本用法

命令语法:

pgrep [选项] 模式

示例:

查找所有名称包含 ssh 的进程:

pgrep ssh

输出示例:

1320
2001

表示有两个进程名称包含 ssh,其 PID 分别为 13202001

常用选项(如 -u, -l, -f

1. -u:指定用户

查找指定用户的进程:

pgrep -u alice bash

输出示例:

1450
1600

2. -l:显示进程名称

显示进程的 PID 及名称:

pgrep -l ssh

输出示例:

1320 sshd
2001 ssh-agent

3. -f:匹配完整命令行

匹配完整的命令行,而不仅仅是进程名称:

pgrep -f "nginx: worker process"

输出示例:

2002
2003
应用场景
  • 批量终止进程:结合 kill 命令批量终止特定名称的进程。
  • 监控特定进程:定期检查某个服务是否在运行。
  • 脚本自动化:在脚本中自动查找和管理进程。

示例:批量终止所有 nginx 进程

kill $(pgrep nginx)

注意事项:

  • 使用 pgrep 时确保模式足够精确,避免匹配不必要的进程。
  • 对于关键系统进程,谨慎终止,以免影响系统稳定性。

4.3 进程管理与控制

进程管理与控制包括终止、暂停、恢复和后台执行进程等操作,确保系统资源的有效利用和任务的顺利完成。

4.3.1 kill - 终止进程

kill 命令用于发送信号给进程,通常用于终止不响应的进程。

基本用法(按 PID)

命令语法:

kill [信号] PID

默认信号:

如果未指定信号,默认发送 SIGTERM(15),请求进程正常终止。

示例:终止 PID 为 1500 的进程

kill 1500

输出:

无输出,命令执行成功表示信号已发送。

验证进程是否终止:

ps -p 1500

如果进程已终止,输出将为空。

信号的使用(如 SIGTERM, SIGKILL

信号用于控制进程的行为,常见信号包括:

  • SIGTERM(15):请求进程终止,进程可以捕获并进行清理操作。
  • SIGKILL(9):强制终止进程,无法被捕获或忽略。
  • SIGSTOP:暂停进程执行。
  • SIGCONT:继续执行被暂停的进程。

发送不同信号的示例:

  1. 发送 SIGTERM

    kill -SIGTERM 1500
    

    或使用信号编号:

    kill -15 1500
    
  2. 发送 SIGKILL

    kill -SIGKILL 1500
    

    或使用信号编号:

    kill -9 1500
    

示例操作:

假设进程 1500 是一个挂起的应用程序,无响应。

  1. 尝试正常终止:

    kill 1500
    
  2. 如果进程未响应,强制终止:

    kill -9 1500
    
常见实例与注意事项

实例 1:终止一个僵尸进程

僵尸进程无法被 kill 命令终止,因为它已经完成执行,只等待其父进程回收资源。解决方法是终止父进程,让系统自动回收僵尸进程。

# 查找僵尸进程
ps aux | grep 'Z'# 假设僵尸进程的 PPID 为 1320
kill -HUP 1320

实例 2:暂停和恢复进程

虽然 kill 主要用于发送终止信号,但也可以发送暂停(SIGSTOP)和恢复(SIGCONT)信号。

# 暂停进程 1500
kill -SIGSTOP 1500# 恢复进程 1500
kill -SIGCONT 1500

注意事项:

  • 权限:只有进程所有者或超级用户才能发送信号。
  • 谨慎使用 SIGKILL:强制终止进程可能导致数据丢失或系统不稳定,应尽量先尝试 SIGTERM
  • 避免终止关键系统进程:终止如 initsystemd 等关键进程可能导致系统崩溃。
4.3.2 pkill - 按名称终止进程

pkill 是一个更方便的工具,用于根据进程名称或其他属性发送信号,简化进程管理。

基本用法

命令语法:

pkill [选项] 模式

示例:终止所有名称包含 nginx 的进程

pkill nginx

说明:

默认发送 SIGTERM 信号,请求进程正常终止。

常用选项(如 -u, -f, -SIG

1. -u:指定用户

终止指定用户的进程:

pkill -u alice bash

2. -f:匹配完整命令行

匹配完整的命令行内容:

pkill -f "python script.py"

3. -SIG:指定信号

发送特定信号:

pkill -SIGKILL nginx

或使用信号编号:

pkill -9 nginx
应用场景与示例

场景 1:终止所有 python 进程

pkill python

场景 2:终止特定用户的进程

终止用户 bob 的所有 ssh 进程:

pkill -u bob ssh

场景 3:发送 SIGSTOP 信号暂停进程

pkill -SIGSTOP nginx

注意事项:

  • 模式匹配的准确性:确保模式足够精确,以避免终止不相关的进程。
  • 权限:与 kill 类似,只有进程所有者或超级用户才能发送信号。
  • 谨慎使用高权限信号:如 SIGKILL,避免对系统稳定性造成影响。
4.3.3 killall - 终止所有匹配进程

killall 命令用于终止所有名称匹配指定模式的进程,适用于同时管理多个相同类型的进程。

基本用法

命令语法:

killall [选项] 进程名

示例:终止所有 nginx 进程

killall nginx

说明:

默认发送 SIGTERM 信号,请求进程正常终止。

常用选项与参数

1. -u:指定用户

终止指定用户的进程:

killall -u alice bash

2. -s:指定信号

发送特定信号:

killall -s SIGKILL nginx

或使用信号编号:

killall -9 nginx

3. -I:忽略大小写

忽略进程名称的大小写:

killall -I Nginx

4. -w:等待进程终止

等待所有进程终止后再返回:

killall -w nginx
应用场景与注意事项

场景 1:重启 Web 服务器

killall -9 nginx
service nginx start

场景 2:终止特定用户的进程

killall -u bob firefox

注意事项:

  • 避免误杀进程:确保进程名准确,避免终止系统关键进程。
  • 权限控制:只有进程所有者或超级用户才能终止进程。
  • 信号选择:优先使用 SIGTERM,必要时使用 SIGKILL
4.3.4 暂停、恢复和后台执行进程

在命令行中运行的前台进程可以通过快捷键和命令进行暂停、恢复和后台执行,提升任务管理的灵活性。

使用 Ctrl+Z 暂停进程

当一个进程在前台运行时,可以通过按下 Ctrl+Z 将其暂停,进程进入后台的停止状态。

示例:

gedit

操作:

按下 Ctrl+Z,输出如下:

[1]+  Stopped                 gedit
使用 bg 将进程放到后台

将已暂停的进程恢复执行,并在后台继续运行。

命令:

bg

示例操作:

bg

输出示例:

[1]+ gedit &
使用 fg 将进程恢复到前台

将后台运行的进程恢复到前台,使其继续与用户交互。

命令:

fg

示例操作:

fg

输出示例:

gedit
使用 jobs 查看后台任务

jobs 命令用于列出当前终端的所有后台任务及其状态。

命令:

jobs

输出示例:

[1]+  Running                 gedit &
[2]-  Stopped                 vim
实例操作

示例 1:暂停并后台运行进程

  1. 启动一个长时间运行的进程,如 gedit

    gedit
    
  2. Ctrl+Z 暂停进程:

    [1]+  Stopped                 gedit
    
  3. 将进程放到后台继续运行:

    bg
    
    [1]+ gedit &
    

示例 2:查看并恢复后台任务

  1. 查看后台任务:

    jobs
    
    [1]+  Running                 gedit &
    [2]-  Stopped                 vim
    
  2. vim 恢复到前台:

    fg %2
    
    vim
    

注意事项:

  • 终端关闭影响:后台任务在终端关闭后可能被终止,除非使用 nohupscreen 等工具。
  • 资源占用:后台进程仍然占用系统资源,应根据需要合理管理。
4.3.5 nohup - 让进程在退出后继续运行

nohup(no hang up 的缩写)用于启动一个进程,使其在用户退出终端或关闭会话后仍然继续运行。常用于运行长时间执行的任务。

基本用法

命令语法:

nohup command [args] &

示例:启动一个长时间运行的脚本 backup.sh,使其在用户注销后继续运行

nohup ./backup.sh &

操作结果:

  • 生成 nohup.out 文件,记录进程的标准输出和标准错误。
  • 进程在后台运行,独立于终端会话。
常见应用场景(如长时间运行的任务)
  • 数据备份:启动备份脚本,确保备份任务在用户注销后继续运行。
  • 服务器进程:启动需要持续运行的服务器进程,如 Web 服务器、数据库服务器。
  • 批处理任务:执行需要较长时间完成的批处理任务,如数据分析、文件转换。

示例操作:

  1. 启动 backup.sh 脚本,并将输出重定向到 backup.log

    nohup ./backup.sh > backup.log 2>&1 &
    
  2. 验证进程是否在运行

    ps aux | grep backup.sh
    

注意事项:

  • 输出重定向:默认情况下,nohup 将输出重定向到 nohup.out,可以通过 > 手动指定输出文件。
  • 后台运行:使用 & 将进程放到后台,避免占用当前终端。
  • 进程监控:结合 ps, top, htop 等工具监控 nohup 进程的状态。
实例与注意事项

实例 1:启动并监控一个 Python 脚本

nohup python3 long_task.py > long_task.log 2>&1 &

解释:

  • nohup:确保进程在终端关闭后继续运行。
  • python3 long_task.py:执行 Python 脚本。
  • > long_task.log:将标准输出重定向到 long_task.log
  • 2>&1:将标准错误重定向到标准输出。
  • &:将进程放到后台运行。

实例 2:终止 nohup 启动的进程

  1. 查找进程 PID

    ps aux | grep long_task.py
    
  2. 终止进程

    kill PID
    

注意事项:

  • 保持输出可用:定期检查输出日志文件,确保任务按预期运行。
  • 权限:确保有足够的权限启动和管理 nohup 进程。
  • 资源管理:监控 nohup 进程的资源使用,避免占用过多系统资源。

4.4 守护进程与服务

守护进程是系统后台运行的服务进程,负责处理各种系统任务,如网络服务、定时任务、日志记录等。理解守护进程的概念和管理方法,是系统管理的重要技能。

4.4.1 什么是守护进程?
定义与特点

**守护进程(Daemon)**是指在后台运行、不与任何终端交互的进程,通常在系统启动时自动启动,并在整个系统运行期间持续运行,提供各种系统服务。

主要特点:

  • 后台运行:不与用户直接交互,通过日志或配置文件提供信息。
  • 持久性:通常随系统启动而启动,并在系统关闭前一直运行。
  • 独立性:与其他进程相互独立,常作为系统服务运行。
常见守护进程示例(如 sshd, httpd, cron
  • sshd:提供 SSH 服务,允许远程登录和命令执行。
  • httpd / nginx:提供 Web 服务,处理 HTTP 请求。
  • cron:定时任务调度服务,执行预定的任务脚本。
  • syslogd:系统日志服务,收集和记录系统日志。
  • mysqld:MySQL 数据库服务,管理数据库操作。
守护进程的创建与管理

守护进程通常由系统启动脚本或服务管理工具(如 systemd)创建和管理。开发自定义守护进程时,需要遵循特定的创建规范,如分离终端、创建新会话、关闭文件描述符等。

创建守护进程的基本步骤:

  1. 分离终端:确保守护进程不与任何终端关联。
  2. 创建新会话:调用 setsid() 创建新会话,脱离控制终端。
  3. 更改工作目录:通常更改到根目录,避免占用挂载点。
  4. 重定向文件描述符:将标准输入、输出和错误重定向到 /dev/null 或日志文件。
  5. 处理信号:捕获和处理必要的信号,确保守护进程稳定运行。

示例:

以下是一个简单的 C 程序示例,展示如何创建一个守护进程:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>int main() {pid_t pid;// 创建子进程pid = fork();if (pid < 0) exit(EXIT_FAILURE);if (pid > 0) exit(EXIT_SUCCESS);// 创建新会话if (setsid() < 0) exit(EXIT_FAILURE);// 捕获并忽略信号signal(SIGCHLD, SIG_IGN);signal(SIGHUP, SIG_IGN);// 再次 fork 子进程pid = fork();if (pid < 0) exit(EXIT_FAILURE);if (pid > 0) exit(EXIT_SUCCESS);// 更改工作目录chdir("/");// 重置文件权限掩码umask(0);// 关闭所有打开的文件描述符for (int x = sysconf(_SC_OPEN_MAX); x >= 0; x--) {close(x);}// 打开日志文件open("/var/log/mydaemon.log", O_CREAT | O_WRONLY | O_APPEND, 0600);// 守护进程的主循环while (1) {// 执行任务sleep(30);}exit(EXIT_SUCCESS);
}

说明:

  • 创建子进程并终止父进程,确保守护进程与终端分离。
  • 创建新会话和进程组,进一步分离进程。
  • 更改工作目录到根目录,避免占用挂载点。
  • 关闭所有文件描述符,确保守护进程不与任何文件关联。
  • 打开日志文件,用于记录守护进程的活动。
  • 主循环中执行守护进程的核心任务。
4.4.2 systemdinit 系统

现代 Linux 发行版主要使用 systemd 作为初始化系统和服务管理器,而传统的 init 系统仍在一些老旧系统中使用。理解这两者的基本概念和功能,有助于更有效地管理系统服务。

init 系统的基本概念与功能

init 是 Unix 系统中的第一个用户空间进程,负责系统启动过程中的初始化工作,如挂载文件系统、启动系统服务等。传统的 init 系统使用运行级别(runlevels)来管理系统状态,每个运行级别对应不同的服务集。

常见运行级别:

运行级别 描述
0 关机
1 单用户模式
2 多用户模式,无网络
3 多用户模式,有网络
4 用户自定义
5 多用户模式,有图形界面
6 重启

管理服务:

通过编辑 /etc/init.d/ 目录下的脚本,控制服务的启动和停止。

示例:启动 ssh 服务

sudo /etc/init.d/ssh start
systemd 的基本概念与功能

systemd 是现代 Linux 系统中的初始化系统和服务管理器,取代了传统的 init 系统,提供了更高效和灵活的服务管理方式。systemd 使用单元(unit)文件来定义和管理服务、挂载点、设备等资源。

主要特点:

  • 并行启动:加快系统启动速度。
  • 依赖管理:自动处理服务间的依赖关系。
  • 统一管理:通过统一的命令和接口管理所有系统资源。
  • 日志管理:集成 journald 提供统一的日志记录。
systemdinit 的比较
特性 init systemd
启动速度 较慢,顺序启动 较快,并行启动
服务依赖管理 手动管理,依赖关系复杂 自动管理,依赖关系清晰
日志管理 依赖外部日志系统 集成 journald,统一日志记录
单一工具 多种工具分别管理服务 单一命令(systemctl)管理所有服务
配置方式 脚本化配置 单元文件配置
功能扩展 功能有限 功能丰富,支持快照、定时任务等高级功能
systemd 的优势与特点
  • 高效并行启动:通过并行启动服务,显著提高系统启动速度。
  • 统一管理工具:使用 systemctl 命令统一管理所有服务和资源。
  • 动态管理:支持动态添加、删除和修改服务配置,无需重启系统。
  • 丰富的功能:支持服务监控、自动重启、资源限制、容器管理等高级功能。
  • 集成日志:通过 journald 提供统一和结构化的日志记录,便于日志分析和管理。

示例:启动和管理 nginx 服务

# 启动 nginx 服务
sudo systemctl start nginx# 停止 nginx 服务
sudo systemctl stop nginx# 重启 nginx 服务
sudo systemctl restart nginx# 查看 nginx 服务状态
sudo systemctl status nginx# 启用 nginx 服务开机自启
sudo systemctl enable nginx
http://www.dtcms.com/a/328823.html

相关文章:

  • 【2025】Datawhale AI夏令营-多模态RAG-Task3笔记-解决方案进阶
  • HGDB的分区表实现SQL Server的分区视图
  • 邀您参与 “直通乌镇” Spring AI Alibaba 开源竞技挑战赛!
  • 2025 最应避免的摄影陷阱以及解决方案
  • 八月补丁星期二:微软修复 111 个漏洞
  • String里常用的方法
  • Vue项目生产环境性能优化实战指南
  • 服务器查看 GPU 占用情况的方法
  • mac环境下安装git并配置密钥等
  • 搜索引擎核心机制解析
  • RabbitMQ面试精讲 Day 21:Spring AMQP核心组件详解
  • 详解Windows(二十)——恶意软件清除
  • CV 医学影像分类、分割、目标检测,之【腹腔多器官语义分割】项目拆解
  • 1.4.2 嵌入(embedding)模式:让人工智能大模型为你的产品或业务助力
  • 大模型微调【1】之入门
  • 实践基地授牌:重庆五一职院与成都影像产业园强实训
  • Coze Studio 概览(十)--文档处理详细分析
  • CW32L011电机开发板控制教程
  • C++ 面向对象四大特性:面试深度解析
  • 一个接口多个实现类,如何动态调用
  • 神经网络的核心组件解析:从理论到实践
  • ARM 实操 流水灯 按键控制 day53
  • Django REST Framework视图
  • HarmonyOS NDK的JavaScript/TypeScript与C++交互机制
  • Flask vs Django:微框架与一站式对决
  • web安全开发,在线%射击比赛管理%系统开发demo,基于html,css,jquery,python,django,三层mysql数据库
  • C# 异常处理与拦截全攻略:try/catch/finally、using、ASP.NET Core 中间件与过滤器一网打尽(含完整示例)
  • tRAP(tRNA 活性预测器)
  • Java开发主流框架搭配详解及学习路线指南
  • 二叉树的最小深度