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

有问题评论区交流~

相关推荐
wdfk_prog1 小时前
[Linux]学习笔记系列 -- hashtable
linux·笔记·学习
每日出拳老爷子1 小时前
【远程协助】内网 IT 运维远程协助系统的最小可用架构
运维·服务器·远程工作·流媒体·视音频
weixin_462446231 小时前
使用 Puppeteer 设置 Cookies 并实现自动化分页操作:前端实战教程
运维·前端·自动化
CheungChunChiu2 小时前
Linux 内核动态打印机制详解
android·linux·服务器·前端·ubuntu
犹若故人归2 小时前
Github/Gitee和Git实践
git·gitee·github
西***63472 小时前
打破部署桎梏!编码器两大核心架构(NVR/PoE)深度解析
服务器·音视频·视频编解码
BlueBirdssh3 小时前
linux 内核通过 dts 设备树 配置pcie 控制器 各种参数和中断等, 那freeRTOS 是通过直接设置PCIe寄存器吗
linux
小目标一个亿3 小时前
Windows平台Nginx配置web账号密码验证
linux·前端·nginx
实战项目3 小时前
软件测试自动化框架的设计与实现
运维·自动化
Aotman_3 小时前
Element-UI Message Box弹窗 使用$confirm方法自定义模版内容,修改默认样式
linux·运维·前端