CentOS 7.9模拟并结束僵尸进程

人生处万类,知识最为贤。这篇文章主要讲述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)阻塞状态:
CentOS 7.9模拟并结束僵尸进程

文章图片

(2)复制会话,使用命令查看僵尸进程状态:
# top

CentOS 7.9模拟并结束僵尸进程

文章图片

# ps -e l | grep python

CentOS 7.9模拟并结束僵尸进程

文章图片

备注:Z+表示产生的子进程是僵尸进程。
# ps -eo stat,ppid,pid,cmd | egrep \'^[Zz]\'

CentOS 7.9模拟并结束僵尸进程

文章图片

备注:
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

CentOS 7.9模拟并结束僵尸进程

文章图片

CentOS 7.9模拟并结束僵尸进程

文章图片

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

CentOS 7.9模拟并结束僵尸进程

文章图片

4、测试:
(1)查看僵尸进程数量:
# top

CentOS 7.9模拟并结束僵尸进程

文章图片

(2)运行脚本:
# /tmp/test.py

(3)动态查看僵尸进程数量:
CentOS 7.9模拟并结束僵尸进程

文章图片

(4)每分钟执行一次任务计划,结束僵尸进程:
CentOS 7.9模拟并结束僵尸进程

文章图片

CentOS 7.9模拟并结束僵尸进程

文章图片

(5)自动发送邮件提醒:
【CentOS 7.9模拟并结束僵尸进程】
CentOS 7.9模拟并结束僵尸进程

文章图片


    推荐阅读