进程管理入门:查看和控制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

有问题评论区交流~

相关推荐
虾..16 小时前
UDP协议
网络·网络协议·udp
w-w0w-w16 小时前
Unix网络编程
服务器·网络·unix
未知鱼17 小时前
Python安全开发之子域名扫描器(含详细注释)
网络·python·安全·web安全·网络安全
寂柒17 小时前
序列化与反序列化
linux·网络
量子位17 小时前
字节版龙虾架构火爆GitHub!开源获35k+ Star,内置Skill全家桶,原生适配飞书
github·ai编程
lay_liu17 小时前
ubuntu 安装 Redis
linux·redis·ubuntu
曾经拒绝刘亦菲17 小时前
Clamav在麒麟V10离线安装指南
运维
志栋智能17 小时前
超自动化巡检:应对复杂IT环境的必然选择
运维·网络·安全·web安全·自动化
li星野17 小时前
[特殊字符] Linux/嵌入式Linux面试模拟卷
linux·运维·面试
肠胃炎17 小时前
挂载方式部署项目
服务器·前端·nginx