一、定期清理Ubuntu无用进程的通用步骤
top(实时动态显示,按q退出)或htop(更直观,需安装:sudo apt install htop)工具,通过%CPU、%MEM列识别占用资源过高(如CPU>80%、内存>500MB)的无用进程。ps aux | grep <进程名>(如ps aux | grep nginx)过滤出目标进程,结合grep -v grep排除自身命令,再用awk '{print $2}'提取进程ID(PID)。kill <PID>发送SIGTERM信号(默认),请求进程正常退出(适用于可响应的进程)。kill -9 <PID>发送SIGKILL信号(强制终止),但需谨慎使用(可能导致数据丢失)。pkill <进程名>(如pkill chrome)或killall <进程名>(如killall firefox)快速终止所有同名进程。apache2),用sudo systemctl stop <服务名>停止服务,sudo systemctl disable <服务名>禁用开机自启。cleanup_unused.sh),包含识别和终止无用进程的命令。示例如下:#!/bin/bash
# 清理占用内存超过500MB的进程
ps -eo pid,ppid,cmd,%mem --sort=-%mem | awk '$4 > 500 {print $1}' | xargs -r kill -9
# 清理占用CPU超过80%的进程
ps -eo pid,ppid,cmd,%cpu --sort=-%cpu | awk '$4 > 80 {print $1}' | xargs -r kill -9
保存后赋予执行权限:chmod +x cleanup_unused.sh。crontab -e编辑当前用户的cron表,添加定时执行脚本的任务。例如,每天凌晨2点运行脚本:0 2 * * * /path/to/cleanup_unused.sh >> /var/log/cleanup.log 2>&1
或每小时运行一次:0 * * * * /path/to/cleanup_unused.sh(日志输出到/var/log/cleanup.log)。二、僵尸进程的专项定期清理
top,查看Z列(僵尸进程标识),数值大于0则表示存在僵尸进程。ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]',输出中状态为Z(僵尸)的进程即为目标。ps -o ppid= -p <僵尸PID>获取父进程ID(PPID),再用kill -HUP <父进程PID>发送SIGHUP信号,通知父进程回收子进程。nginx),重启服务可强制回收所有僵尸子进程:sudo systemctl restart <服务名>。zombie_cleaner.sh),定期检查并处理:#!/bin/bash
ZOMBIES=$(ps -A -ostat,ppid | grep -e '^[Zz]' | wc -l)
if [ $ZOMBIES -gt 0 ]; then
echo "$(date): 发现$ZOMBIES个僵尸进程,开始清理..." >> /var/log/zombie_cleanup.log
ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}' | xargs -r kill -HUP
fi
添加cron任务(每10分钟运行一次):*/10 * * * * /path/to/zombie_cleaner.sh。注意事项
kill -9会立即终止进程,可能导致未保存数据丢失,建议先尝试普通终止。ps aux | grep <PID>或systemctl status <服务名>确认进程功能,避免误杀系统关键进程(如systemd、sshd)。/var/log/syslog)和进程状态,确保清理操作未影响系统稳定性。