linux进程监控:判断是否存在,是否僵死进程,进行重启和杀死重启

本文介绍了一种使用shell脚本和cron定时任务自动监控并重启特定进程的方法。通过轮询检查进程状态,判断进程是否存在及是否僵死,若进程不存在则自动重启,若进程僵死则先kill后重启,确保进程稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做了一个进程调度框架,为了确保进程正常运行,进行了轮训检测;在进程不存在的时候,自动重启,如果存在,判断是否僵死,如果僵死,就kill掉,再自动重启;
直接上脚本:

轮询检测进程(cron)
创建/root/runcron 目录, (目录是自己随便建的)
	在这个目录下存放要执行的shell脚本,  参考脚本在下边;记得设置脚本的可执行权限
	chmod u+x filename
在  /etc/crontab 中添加自己的任务,/root/runcron 是自己创建的,
*/1 * * * * root run-parts /root/runcron
这样定时任务就自己执行了, 查看命令
tail -f /var/log/cron
日志会有执行的记录,如果没有执行, 就重新启动下crond服务,
/sbin/service crond reload   ##--->> 重新加载
/sbin/service crond restart   ## ---->重启服务
判断进程是否存在,从而重启或者杀死
##脚本
#!/bin/bash
#判断指定进程是否存在
result=`ps -ef | grep -w dbjob | grep -v grep | wc -l`
if [ $result -le 0 ]; then
    #不存在, 重启
	nohup java -Xms512m -Xmx1024m -jar /home/project/dbjob.jar &
else    
    #存在,判断状态
    #取进程状态,用来判断是否僵死
	val=`ps -aux | grep dbjob | grep -v grep | awk '{print $8}'`
	if [ "$val" == "Z" ];then
		# 取进程ID,用来kill掉进程
		pid = `ps -aux | grep dbjob | grep -v grep | awk '{print $2}'`
		kill -9 $pid
	fi
fi
<think>首先,用户的问题是:“我想查看Linux系统中的死进程信息请问如何在Linux中查看死进程”。用户提到“死进程”,这可能指的是僵尸进程(Zombieprocesses),在Linux中,僵尸进程是那些已经终止但父进程还没有调用wait()系统调用来获取其退出状态的进程。根据系统级指令:-所有行内数学表达式必须使用$...$格式,但这里没有数学表达式,所以不需要。-独立公式必须使用$$...$$格式并单独成段,但同样,这个问题不涉及数学公式。-LaTeX语法正确:确保任何数学表达式正确,但这里不适用。-使用中文回答:整个回答要用中文。-生成相关问题:在回答结束时,生成相关问题。-回答中引用的段落末尾自然地添加引用标识:如[^1],[^2]等。我需要参考提供的引用内容。提供的引用:-引用[1]:关于杀死进程线程的方法。-引用[2]:关于查看进程状态的方法,包括ps、top、htop命令。-引用[3]:详细介绍了ps命令的参数、进程状态(包括僵尸状态),以及kill命令。-引用[4]:关于查看Java进程的特定参数。用户的问题是关于“死进程”,即僵尸进程。引用[3]中明确提到了僵尸状态:“Z:僵死表示进程已经终止,但进程描述符依然存在,直到父进程调用wait(4)系统函数后将进程释放。”这正是用户所说的“死进程”。所以,我应该基于引用[3]来回答,因为它是关于查看进程状态僵尸进程的。回答结构:-结构清晰,帮助用户逐步解决问题。-保证回答真实可靠:基于Linux知识。步骤:1.解释什么是僵尸进程。2.介绍如何查看僵尸进程。3.提供具体的命令方法。4.引用相关部分。命令:-使用ps命令查看进程状态。psaux可以显示所有进程,其中STAT列显示状态。-僵尸进程的状态是'Z'。-用户可以使用psaux|grep'Z'或类似命令来过滤出僵尸进程。从引用[3]:-"psaux"显示所有进程。-"STAT:进程状态",其中"Z:僵死"。-还提到"查看本用户的进程及其状态psu"。所以,我可以建议:-运行psaux|grep'Z'来查找状态为Z的进程。-或者使用top命令,其中可能有僵尸进程的指示。引用[2]提到top命令:"top命令提供了一个动态更新的视图",但没有指定僵尸状态。引用[3]更相关。最终命令示例:-psaux|grep'Z'或直接psaux并手动查找Z状态。-在top命令中,按't'或查看状态列。生成相关问题:-在回答结束时,添加相关问题。引用标识:-在回答中引用引用[3],因为它直接相关。回答大纲:1.介绍僵尸进程。2.解释如何查看:使用ps命令。3.给出具体命令。4.讨论如何处理僵尸进程(可选,但用户只问查看)。5.添加相关问题。用户只问“查看”,所以焦点在查看上。</think>### 查看Linux中的死进程(僵尸进程) 在Linux系统中,“死进程”通常指的是**僵尸进程(Zombie processes)**。僵尸进程是那些已经终止执行(如正常退出或被杀死),但其父进程尚未调用 `wait()` 系统调用来获取其退出状态的进程。这些进程不会占用CPU或内存资源,但会保留进程ID(PID),并在进程列表中显示为“僵死”状态。僵尸进程过多可能表示父进程存在缺陷,但通常不会直接影响系统性能。以下我将逐步介绍如何查看僵尸进程,基于Linux的标准工具方法。 #### 步骤1: 理解僵尸进程的状态 在Linux中,进程状态由 `ps` 命令的 `STAT` 列表示。僵尸进程的状态标记为 **'Z'**(僵死)。其他常见状态包括: - **R**:运行中(Running) - **S**:可中断睡眠(Interruptible sleep) - **D**:不可中断睡眠(Uninterruptible sleep) - **T**:停止(Stopped) 僵尸进程的描述为:“表示进程已经终止,但进程描述符依然存在,直到父进程调用 `wait(4)` 系统函数后将进程释放”[^3]。 #### 步骤2: 使用 `ps` 命令查看僵尸进程 `ps` 命令是最直接的工具来查看进程状态。以下是具体方法: - **查看所有进程并过滤僵尸状态**: 运行以下命令,它会列出所有进程,并通过 `grep` 过滤出状态为 'Z' 的僵尸进程: ```bash ps aux | grep 'Z' ``` 输出示例: ``` USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 123 0.0 0.0 0 0 ? Z 10:00 0:00 [defunct] ``` **参数解释**(来自引用[3]): - `-a`:显示所有进程,包括其他用户的进程。 - `-u`:显示用户及其他详细信息(如CPU内存占用)。 - `-x`:显示没有控制终端的进程(常包括僵尸进程)。 - `STAT` 列:'Z' 表示僵尸状态。 - 其他列:`USER`(所有者)、`PID`(进程ID)、`%CPU`(CPU占用率)、`%MEM`(内存占用率)等。 - **仅查看僵尸进程的简要信息**: 如果您只想查看僵尸进程的PID,可以简化命令: ```bash ps -eo pid,stat,comm | grep 'Z' ``` 输出示例: ``` 123 Z [defunct] ``` #### 步骤3: 使用 `top` 命令动态监控 `top` 命令提供实时视图,适合监控系统整体状态,包括僵尸进程: - 运行命令: ```bash top ``` 在 `top` 界面中: - 查看顶部的“Tasks”行:它会显示僵尸进程的数量,例如 `zombie: 1`。 - 在进程列表中,查找 `STAT` 列为 'Z' 的条目。 - 按 `z` 键高亮显示僵尸进程(如果支持)。 - 退出按 `q` 键。 `top` 的优势是动态更新,便于观察变化,但不如 `ps` 精确过滤僵尸进程[^2]。 #### 其他工具注意事项 - **htop 命令**(增强版 top):如果已安装(通过 `sudo apt install htop` 或 `sudo yum install htop`),运行 `htop` 后,它通常以不同颜色标记僵尸进程,界面更友好[^2]。 - **为什么僵尸进程存在**:僵尸进程通常由父进程未正确处理子进程退出引起。它们不消耗资源,除非数量过多(如数百个),否则无需立即处理。如果需要清理,可以通过杀死进程(使用 `kill -9 <parent_pid>`)或重启服务来解决[^1][^3]。 - **查看特定进程**:如果是Java进程,您可以使用 `jps` 或 `ps -ef | grep java` 结合状态过滤,但僵尸状态查看方法相同[^4]。 #### 总结 - **推荐方法**:使用 `ps aux | grep 'Z'` 快速查看僵尸进程。 - **安全性**:僵尸进程本身无害,但频繁出现应检查父进程代码。 - **引用说明**:本回答基于Linux进程管理标准知识,具体命令参考了pstop的文档[^3][^2]。 如果您执行命令后未发现僵尸进程,表示系统当前没有死进程;如果有输出,请提供更多细节(如PID)以便进一步分析。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值