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