CentOS 7.9模拟并结束僵尸进程
Posted Marion0728
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS 7.9模拟并结束僵尸进程相关的知识,希望对你有一定的参考价值。
一、僵尸进程产生原因:
Zombie进程产生原因是父进程产生子进程后,子进程先于父进程退出,但父进程由于种种原因没有处理子进程发送的退出信号,此时子进程就会成为僵尸进程。
二、模拟产生僵尸进程:
1、编写Python脚本:
# vim /tmp/test.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, sys, time
#产生子进程
pid = os.fork()
if pid == 0:
#子进程退出
sys.exit(0)
#父进程休息300秒
time.sleep(300)
# chmod +x /tmp/test.py
2、运行并查看僵尸进程状态:
(1)阻塞状态:
(2)复制会话,使用命令查看僵尸进程状态:
# top
# ps -e l | grep python
备注:Z+表示产生的子进程是僵尸进程。
# ps -eo stat,ppid,pid,cmd | egrep \'^[Zz]\'
备注:
a、将系统中状态为z或者Z的僵尸进程的状态信息、父进程PID、自身PID和cmd信息列出。
b、尝试使用kill命令结束僵尸子进程,无效,只能通过结束父进程或等待父进程退出来结束僵尸子进程。
c、300秒后脚本自动退出。
三、结束僵尸进程:
1、配置QQ邮箱发送邮件提醒:
# yum -y install mailx
# cp /etc/mail.rc{,.bak}
# vim /etc/mail.rc
末尾新增如下代码:
set from=834143808@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=834143808@qq.com
set smtp-auth-password=QQ邮箱授权码
set smtp-auth=login
2、编写Shell脚本:
# vim /tmp/solve.sh
#!/bin/bash
ps -eo stat,ppid,pid,cmd | grep -e \'^[Zz]\' | awk \'{print $2}\' | xargs kill -9 &> /dev/null
if [ $? -eq 0 ];then
echo "The zombie processes have been cleaned up." | mail -s "Attention" 834143808@qq.com
fi
# chmod +x /tmp/solve.sh
3、配置任务计划:
# crontab -e
* * * * * /tmp/solve.sh
# crontab -l
4、测试:
(1)查看僵尸进程数量:
# top
(2)运行脚本:
# /tmp/test.py
(3)动态查看僵尸进程数量:
(4)每分钟执行一次任务计划,结束僵尸进程:
(5)自动发送邮件提醒:
以上是关于CentOS 7.9模拟并结束僵尸进程的主要内容,如果未能解决你的问题,请参考以下文章