Linux进程管理ps top kill详解

ps:拍个快照 ps显示的是某个时刻的进程状态,不是实时更新。最常用组合:
ps aux
a 显示所有用户进程,u 显示用户/CPU/内存,x 包含无终端的进程。输出里STAT列是进程状态:R运行、S睡眠、D不可中断睡眠(通常是IO等待)、Z僵尸、T停止。 想看进程树关系:
ps -ef --forest
-e 所有进程,-f 完整格式,–forest 用ASCII画树形结构。找父进程PID看PPID列。 过滤特定进程:
ps aux | grep nginx
但grep本身也会出现在结果里。用pgrep更干净:
pgrep -l nginx
-l 显示进程名和PID。想看到完整命令行用`pgrep -a`。 top:实时监控 top默认按CPU使用率排序,每秒刷新。进去后按P按CPU排序,按M按内存排序,按1看每个CPU核心负载。 关键看这几个值: – load average:1/5/15分钟平均负载,单核CPU超过1说明过载,四核超过4才报警 – %CPU:进程占用CPU百分比,注意是单核百分比,多核能超过100% – RES:常驻内存,进程实际占用的物理内存,单位默认KB,按E切换单位 – SHR:共享内存,多个进程共享的部分 top默认显示不全,按c显示完整命令行,按f进入字段选择,空格勾选需要的列。 更轻量的htop(需要安装)支持鼠标操作、树形视图、直接按F9杀进程:
htop
不想交互式查看,用批处理模式:
top -b -n 1
-b 批处理,-n 1 只取一次快照,适合写脚本采集数据。 kill:发信号 kill不是只能杀进程,本质是发信号。默认发SIGTERM(15),让进程自己清理退出。进程不响应就发SIGKILL(9),强制干掉。
kill 1234          # 发SIGTERM
kill -9 1234       # 发SIGKILL
kill -15 1234      # 显式发SIGTERM
SIGTERM是礼貌请求,进程可以捕获后做收尾工作(写日志、释放资源)。SIGKILL不能捕获,直接让内核把进程拔掉,可能导致数据丢失。 按名称杀:
killall nginx
pkill nginx
killall精确匹配进程名,pkill支持正则匹配。`pkill -f “python script.py”`能匹配命令行参数。 常见信号: – SIGHUP(1):重载配置,nginx -s reload本质就是发这个 – SIGINT(2):Ctrl+C触发 – SIGQUIT(3):Ctrl+\触发,会生成core dump – SIGSTOP(19):暂停进程,对应Ctrl+Z – SIGCONT(18):让暂停的进程继续 实战场景 场景一:Java进程内存泄漏,CPU飙升
top -p $(pgrep -d',' java)
-p指定PID,逗号分隔多个PID。看到进程PID后:
ps -p 1234 -o pid,%cpu,%mem,cmd
确认是哪个Java进程在吃资源。如果确定要干掉:
kill -15 1234
等5秒,没反应就kill -9。 场景二:僵尸进程 top里看到Z状态进程,kill杀不掉,因为进程已经死了,只是父进程没调用wait()回收。解决方案是杀父进程,让init进程收养并回收。
kill -9 <父进程PID>
场景三:后台服务重启
kill -HUP $(cat /var/run/nginx.pid)
发SIGHUP让nginx重读配置,不需要停服务。 场景四:批量杀进程 服务器被挖矿脚本入侵,CPU全占满:
ps aux | grep -E 'minerd|xmrig' | awk '{print $2}' | xargs kill -9
或者直接:
pkill -9 -f 'minerd|xmrig'
关于服务器选择 我平时做压力测试、跑后台服务,用的雨云服务器,同等配置下价格比同行低30%左右,跑top看load从来没翻过车,IO性能稳定,D状态进程很少出现。如果你需要稳定跑生产环境,可以试试雨云,性价比确实高。

雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容