R / Richie全部文章 ↑

Linux · 2 分钟阅读

Linux 进程管理

2026 年进程管理工具:ps / top / htop 仍是看进程的入口,systemd 接管服务进程的生命周期,crictl / kubectl 负责容器。生产基本是"进程 → systemd unit → 容器"三层。

概念

概念 含义
PID 进程 ID
PPID 父进程 ID
PGID 进程组 ID
SID 会话 ID
nice 优先级(-20 ~ 19,越小越高)
状态 R / S / D / Z / T

查看

ps aux
ps -ef
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu
pstree -p
pgrep nginx

启动

command                       # 前台
command &                     # 后台
nohup command &               # 退出登录也跑
setsid command                 # 新会话

现在更推荐 systemd-run 跑临时任务,统一管理。

终止

kill <pid>                    # SIGTERM(15)
kill -9 <pid>                 # SIGKILL(9,最后手段)
kill -HUP <pid>               # 重读配置
pkill -f pattern
pkill -u alice                 # 干掉某用户所有进程
killall nginx                  # 按名字

状态控制

信号 行为
STOP (19) 暂停
CONT (18) 继续
HUP (1) 终端断开 / 重读配置
TERM (15) 优雅退出
KILL (9) 强制(不可捕获)
USR1 (10) 用户自定义
USR2 (12) 用户自定义
kill -STOP <pid>
kill -CONT <pid>
kill -l                       # 列出所有信号

优先级

nice -n 10 command              # 启动时设
renice 10 -p <pid>             # 运行时改
chrt -f 99 command             # 实时优先级

进程树与孤儿

pstree -p
pstree -u

父进程结束但子进程还在跑 → 孤儿进程,被 init (PID 1) 接管。子进程结束但父没 wait() → 僵尸进程 (Z),只能等父进程回收。

资源限制

ulimit -n 65535                # 文件描述符
ulimit -u 4096                 # 进程数

# 进程级
prlimit --pid <pid> --nofile=65535

# 持久化
# /etc/security/limits.conf
* hard nofile 65535
* soft nofile 65535

进程跟踪

strace -p <pid>                # 系统调用
ltrace -p <pid>                # 库调用
lsof -p <pid>                  # 打开的文件

systemd 视角

systemctl status nginx
systemctl edit nginx
systemd-run --unit=test --description="临时任务" command

服务进程应该用 systemd unit 管理,cron 任务优先选 systemd timer。

一些经验

  • 先 TERM 再 KILL——给进程清理的机会
  • kill -9 后进程可能留下临时文件、socket 残留
  • 进程 ID 1 在容器里是业务进程——它必须能处理 SIGTERM
  • 监控 OOM:dmesg | grep -i oom
  • nohup + & 之后记得 disown,避免 SIGHUP

参考