进程管理入门:查看和控制Linux进程
服务器上跑着很多程序,怎么查看?怎么管理?
今天聊聊Linux进程管理的基础知识。
查看进程
ps命令:
bash
# 查看所有进程
ps aux
# 搜索特定进程
ps aux | grep nginx
输出解读:
USER PID %CPU %MEM VSZ RSS TTY STAT TIME COMMAND
root 1234 0.5 2.1 123456 21000 ? Sl 10:23 nginx
- USER:运行用户
- PID:进程ID
- %CPU:CPU占用
- %MEM:内存占用
- STAT:进程状态
- COMMAND:命令名
top/htop实时监控:
bash
top
常用操作:
- P:按CPU排序
- M:按内存排序
- k:杀进程
- q:退出
推荐用htop,更直观:
bash
apt install htop
htop
查找进程ID
bash
# 用pgrep
pgrep nginx
# 用pidof
pidof nginx
# 用ps过滤
ps aux | grep nginx | awk '{print $2}'
杀死进程
用kill命令:
bash
# 正常终止(发送SIGTERM)
kill 1234
# 强制杀死(发送SIGKILL)
kill -9 1234
按名称杀:
bash
# 杀所有匹配的进程
pkill nginx
# 杀所有匹配的进程(更精确)
killall nginx
先查再杀的套路:
bash
# 找到PID
ps aux | grep nginx
# 杀掉
kill 1234
进程状态
R - 运行中
S - 睡眠中(等待事件)
D - 不可中断睡眠(通常是IO)
Z - 僵尸进程(已结束但未被回收)
T - 停止/挂起
处理僵尸进程:
僵尸进程(Z状态)本身不占资源,但说明父进程有问题。
bash
# 找僵尸进程的父进程
ps -ef | grep defunct
# 找到PPID,kill父进程
后台运行
&符号:
bash
./script.sh &
nohup命令:
bash
nohup ./script.sh &
nohup会忽略挂断信号,退出终端后进程继续运行。
查看后台任务:
bash
jobs
把后台任务调到前台:
bash
fg %1
进程优先级
查看优先级:
bash
ps -eo pid,ni,comm | head
NI列是nice值,-20到19,越小优先级越高。
调整优先级:
bash
# 启动时指定
nice -n 10 ./script.sh
# 修改运行中的进程
renice 10 -p 1234
系统服务管理
现代Linux用systemd管理服务:
bash
# 查看服务状态
systemctl status nginx
# 启动/停止/重启
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
# 开机自启
systemctl enable nginx
systemctl disable nginx
# 查看所有运行中的服务
systemctl list-units --type=service --state=running
实战案例
案例1:找出CPU占用最高的进程
bash
ps aux --sort=-%cpu | head -10
案例2:找出内存占用最高的进程
bash
ps aux --sort=-%mem | head -10
案例3:杀死所有Java进程
bash
pkill -f java
案例4:查看进程的详细信息
bash
# 查看进程打开的文件
lsof -p 1234
# 查看进程的网络连接
ss -tlnp | grep 1234
# 查看进程的资源限制
cat /proc/1234/limits
案例5:监控特定进程
bash
# 实时看某个进程的资源占用
top -p 1234
# 或者用watch
watch -n 1 "ps -p 1234 -o %cpu,%mem,cmd"
screen/tmux保持会话
SSH断开后想让程序继续跑,用screen或tmux:
bash
# 创建会话
screen -S myapp
# 运行程序
./my_long_script.sh
# 分离会话(Ctrl+A然后按D)
# 重新连接
screen -r myapp
即使SSH断了,进程也不会停。
远程进程管理
管理多台服务器的进程,我用星空组网连起来后可以批量操作:
bash
# 批量查看nginx状态
for ip in 10.26.1.{10..15}; do
echo "=== $ip ==="
ssh root@$ip "systemctl status nginx | head -5"
done
比一台台登录方便多了。
常用命令速查
| 场景 | 命令 |
|---|---|
| 查看所有进程 | ps aux |
| 实时监控 | top 或 htop |
| 搜索进程 | pgrep 名称 |
| 杀死进程 | kill PID |
| 强制杀死 | kill -9 PID |
| 按名称杀 | pkill 名称 |
| 后台运行 | nohup command & |
| 服务状态 | systemctl status 服务 |
小结
进程管理核心:
- 看进程:
ps aux/top - 杀进程:
kill/pkill - 后台运行:
nohup ... & - 服务管理:
systemctl
有问题评论区交流~