浮头导航网

专注编程技术分享的开发者社区

Linux卡顿/崩溃?这篇进程管理指南让你秒变运维高手

大家好!今天咱们聊个每个Linux用户都绕不开的话题——进程管理。我猜你肯定遇到过这些情况:电脑突然变卡,鼠标点不动;远程服务器CPU飙到100%,网站打不开;或者明明关了程序,后台还偷偷跑着进程占内存……别慌!今天我把压箱底的进程管理技巧掏出来,从“找进程”到“杀进程”,再到“管服务”,保证你看完能解决95%的日常问题!

一、为什么需要懂进程管理?

简单说,进程就是正在运行的程序。比如你打开的浏览器、编辑器,服务器上跑的Nginx、MySQL,都是进程。不懂进程管理,你就没法:

  • 快速定位卡顿的“元凶”(哪个进程在疯狂吃CPU/内存?)
  • 防止程序“僵尸化”(进程死了却不退出,占着资源不放)
  • 远程维护服务器(不用跑机房,在家就能重启服务)

二、快速查看进程:3个命令搞定

1. ps:静态快照(适合脚本/精准查询)

ps是最基础的进程查看命令,常用两种用法:

  • ps aux:显示所有用户的进程(a=all用户,u=详细用户信息,x=包括后台进程)。输出第一行是表头,重点看USER(用户)、PID(进程ID)、%CPU(CPU占用)、%MEM(内存占用)、COMMAND(进程名)。
    比如:$ ps aux | grep nginx(过滤出nginx相关进程)。
  • ps -ef:显示完整格式的进程列表(e=所有进程,f=完整格式)。适合配合grep搜索,比如$ ps -ef | grep mysql。

2. top:动态监控(适合实时排查卡顿)

top是交互式工具,启动后按q退出。它会实时刷新进程状态,默认按CPU占用排序。

  • 按M(大写):按内存占用排序(内存大的排前面)。
  • 按P(大写):回到CPU排序(默认)。
  • 按k:输入PID强制终止进程(比如输入1234再回车,相当于kill 1234)。

举个栗子:我之前远程服务器突然变慢,用top一开,发现有个php-fpm进程占了90% CPU,直接k掉就恢复了!

3. htop:更友好的交互式工具(推荐安装)

htop是top的升级版,界面更直观(支持鼠标操作),还能直接看到进程树关系。安装也简单:

  • Ubuntu/Debian:sudo apt install htop
  • CentOS/Fedora:sudo yum install htop

启动后,按F2可以自定义显示列(比如加IO读写),按F9选择信号(比如SIGKILL强制终止)。

三、进程状态解读:看懂这些字母就够了

在ps aux或top的输出里,有一列STAT(或S)表示进程状态,常见状态有:

  • R(Running):正在运行或等待运行(CPU核心忙时可能在“就绪”队列)。
  • S(Sleeping):可中断睡眠(等待输入/输出,比如等网络数据,能被信号唤醒)。
  • D(Uninterruptible Sleep):不可中断睡眠(通常是硬件操作,比如读写磁盘,强行终止可能丢数据)。
  • Z(Zombie):僵尸进程(子进程死了,但父进程没回收资源,像“尸体”占着坑)。
  • T(Stopped):停止状态(比如用Ctrl+Z暂停了进程)。

重点提醒:僵尸进程(Z)要赶紧处理!否则会越积越多,占用PID资源。杀僵尸进程得先杀它的父进程(用ps -ef看PPID父进程ID),父进程死了,僵尸会被init(或systemd)回收。

四、管理进程:启动、停止、后台运行

1. 启动进程:前台vs后台

  • 前台启动:直接运行命令(比如./start.sh),会占用当前终端,按Ctrl+C终止。
  • 后台启动:加&(比如./start.sh &),进程在后台跑,终端还能继续用。但关闭终端会连带终止进程(除非用nohup)。

2. 终止进程:温柔点还是暴力点?

  • kill PID:发送SIGTERM信号(温柔终止,进程有机会保存数据)。
  • kill -9 PID:发送SIGKILL信号(强制终止,直接“杀”掉,可能丢数据)。
  • pkill 进程名:按名称杀进程(比如pkill nginx杀所有nginx进程)。
  • pgrep 进程名:先查PID(比如pgrep mysql返回MySQL的PID)。

3. 后台进程进阶:nohup+&

远程服务器上跑长时间任务(比如备份),断开终端会终止进程?用这组合:

nohup ./long_task.sh > task.log 2>&1 &  # 输出重定向到task.log,后台运行

这样即使关了终端,任务也会继续跑,日志存在task.log里。

五、高阶操作:用systemctl管服务(服务器必备)

现代Linux系统(如Ubuntu 16.04+、CentOS 7+)用systemd管理服务,systemctl是最核心的命令。

1. 常用操作

  • 启动服务:sudo systemctl start nginx
  • 停止服务:sudo systemctl stop nginx
  • 重启服务:sudo systemctl restart nginx(改配置后常用)
  • 查看状态:sudo systemctl status nginx(看是否运行、日志)
  • 开机启动:sudo systemctl enable nginx
  • 禁用开机启动:sudo systemctl disable nginx

2. 实战案例:网站突然打不开

场景:用户反馈访问网站提示“502 Bad Gateway”,可能是Nginx挂了。
解决步骤:

  1. 查看Nginx状态:systemctl status nginx,发现显示failed(失败)。
  2. 尝试重启:systemctl restart nginx,如果成功,问题解决。
  3. 如果重启失败,看日志找原因:journalctl -u nginx -e(查看Nginx的详细日志)。

六、注意事项

  1. 别乱杀PID=1的进程(通常是systemd或init),会导致系统崩溃!
  2. 用kill -9前先试kill(温柔终止),避免数据丢失(比如数据库写入中途)。
  3. 远程操作服务器时,终止关键服务(如MySQL)前务必确认影响,最好先通知团队。

课后练习

  1. 打开终端,用top或htop观察进程,找到占用CPU最高的进程,记下它的PID和名称。
  2. 启动一个后台进程(比如sleep 1000 &),然后用ps aux | grep sleep验证是否在运行。
  3. 尝试用systemctl查看当前系统的nginx服务状态(如果没有安装,换成apache2或mysql)。
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言