进程管理入门:查看和控制Linux进程

进程管理入门:查看和控制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
实时监控 tophtop
搜索进程 pgrep 名称
杀死进程 kill PID
强制杀死 kill -9 PID
按名称杀 pkill 名称
后台运行 nohup command &
服务状态 systemctl status 服务

小结

进程管理核心:

  • 看进程:ps aux / top
  • 杀进程:kill / pkill
  • 后台运行:nohup ... &
  • 服务管理:systemctl

有问题评论区交流~

相关推荐
The star"'2 小时前
华为云服务系列总结
运维·华为云·云计算
步步为营DotNet2 小时前
深度解析.NET中HttpClient的连接管理机制:优化网络请求性能
网络·.net
gaize12132 小时前
网络服务器配置与管理深度分享
服务器
云和数据.ChenGuang2 小时前
openeuler下的git指令集合
linux·运维·数据库·centos
珠海西格电力2 小时前
零碳园区工业园区架构协同方案
运维·人工智能·物联网·架构·能源
奥尔特星云大使2 小时前
使用 Docker 运行 SQL Server 2019
运维·docker·容器·sql server
风静雪冷2 小时前
在Ubuntu上安装docker(docker engine)和docker compose
linux·ubuntu·docker
小宇的天下2 小时前
Calibre DESIGNrev DRC/LVS启动和准备文件(10-1)
服务器·数据库·oracle
m0_485614672 小时前
Linux-Dockerfile与Docker Compose
linux·运维·docker