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)阻塞状态:

\'CentOS

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

# top

\'CentOS

# ps -e l | grep python

\'CentOS

备注:Z+表示产生的子进程是僵尸进程。

# ps -eo stat,ppid,pid,cmd | egrep \'^[Zz]\'

\'CentOS

备注:

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

\'CentOS

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
4、测试:

(1)查看僵尸进程数量:

# top

\'CentOS

(2)运行脚本:

# /tmp/test.py

(3)动态查看僵尸进程数量:

\'CentOS

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

\'CentOS

\'CentOS

(5)自动发送邮件提醒:

\'CentOS

以上是关于CentOS 7.9模拟并结束僵尸进程的主要内容,如果未能解决你的问题,请参考以下文章

【zombie】如何查看并杀死僵尸进程?

忽略SIGCHLD信号能避免僵尸进程吗

僵尸进程与孤儿进程

python学习笔记——孤儿进程和僵尸进程

用叉子结束父进程避免成为僵尸

如何清理僵尸进程(转载)