温馨提示×

Linux 进程如何管理

小樊
54
2026-08-31 09:52:45
栏目: 智能运维

Linux 进程管理是操作系统的核心功能之一,涉及进程的创建、调度、终止、通信和资源管理。以下是关键概念和管理方法的详细说明:


1. 进程的概念

  • 进程(Process):程序的一次执行实例,包含代码、数据、堆栈、文件描述符等资源。
  • 线程(Thread):进程内的执行单元,共享进程的资源(如内存、文件描述符)。
  • 进程ID(PID):每个进程的唯一标识符。
  • 父进程与子进程:子进程由父进程通过 fork() 创建(父进程可能是 init/systemd,PID=1)。

2. 进程的生命周期

  1. 创建:通过 fork() 系统调用复制父进程,或通过 exec() 加载新程序。
  2. 运行:进程在 CPU 上执行。
  3. 等待:进程等待资源(如 I/O)或子进程终止。
  4. 终止:进程退出,成为“僵尸进程”(Zombie),直到父进程回收其状态。

3. 进程管理命令

查看进程

  • ps:查看进程状态。
    ps aux          # 查看所有进程
    ps -ef          # 完整格式列表
    ps -p <PID>     # 查看特定进程
    
  • top / htop:动态查看进程资源占用(CPU、内存)。
  • pstree:树状显示进程关系。

进程控制

  • 启动进程
    command &       # 后台运行
    nohup command & # 忽略挂断信号(脱离终端)
    
  • 终止进程
    kill <PID>              # 发送 SIGTERM(默认,优雅终止)
    kill -9 <PID>           # 发送 SIGKILL(强制终止)
    pkill -f "process_name" # 按名称终止
    
  • 优先级调整
    nice -n 10 command      # 启动进程时设置优先级(-20 高,19 低)
    renice +5 -p <PID>      # 调整运行中进程的优先级
    

4. 进程调度

  • 调度策略
    • CFS(Completely Fair Scheduler):Linux 默认调度器,基于时间片公平分配 CPU。
    • 实时调度SCHED_FIFO(先进先出)、SCHED_RR(轮转)。
  • 查看调度信息
    chrt -p <PID>           # 查看实时优先级
    

5. 进程间通信(IPC)

  • 管道(Pipe)|pipe() 系统调用。
  • 信号(Signal):如 SIGINT(Ctrl+C)、SIGTERM(终止请求)。
    kill -l                 # 列出所有信号
    
  • 共享内存shmget()shmat()
  • 消息队列msgget()msgsnd()
  • 套接字(Socket):网络通信或本地进程通信。

6. 守护进程(Daemon)

  • 后台运行、脱离终端、无控制终端。
  • 通常通过 fork() 后父进程退出,子进程调用 setsid() 创建新会话。
  • 示例:httpd、sshd、systemd 管理的服务。

7. 进程状态

  • R(Running):运行中或可运行。
  • S(Sleeping):可中断睡眠(等待事件)。
  • D(Disk Sleep):不可中断睡眠(通常等待 I/O)。
  • Z(Zombie):已终止但未被父进程回收。
  • T(Stopped):被信号(如 SIGSTOP)暂停。

查看状态:

ps -eo pid,stat,cmd  # 显示 PID、状态、命令

8. 僵尸进程处理

  • 原因:子进程退出后,父进程未调用 wait() 回收其状态。
  • 解决
    1. 终止父进程(僵尸进程会由 init/systemd 回收)。
    2. 修复父进程代码,正确处理 SIGCHLD 信号。

9. 资源管理

  • 限制资源ulimitcgroups(控制组)。
    ulimit -a              # 查看限制
    ulimit -n 1024         # 设置打开文件数限制
    
  • Cgroups:用于容器化(如 Docker)或精细化资源控制。

10. 实践示例

监控并终止高 CPU 进程

top -p $(pgrep -f "process_name")  # 监控特定进程
kill -15 $(pgrep -f "process_name") # 优雅终止

后台运行并管理

nohup python script.py > log.txt 2>&1 &
disown                       # 从当前 shell 分离

总结

  • Linux 进程管理围绕 创建、调度、通信、终止 展开。
  • 使用 pstopkill 等工具进行日常操作。
  • 理解进程状态(如僵尸进程)和调度策略有助于系统调优。
  • 守护进程和 IPC 是高级主题,需结合具体场景学习。

如需深入某个方向(如内核调度、容器进程管理),可进一步探讨!

0