如何杀死僵尸进程

2024-11-05 08:37:00
admin
原创
175
摘要:问题描述:我在前台启动了我的程序(守护程序),然后我用 杀死了它kill -9,但我得到了一个僵尸进程,我无法用 杀死它kill -9。如何杀死僵尸进程?如果僵尸进程是一个死进程(已经被杀死),我该如何将其从输出中删除ps aux?root@OpenWrt:~# anyprogramd & r...

问题描述:

我在前台启动了我的程序(守护程序),然后我用 杀死了它kill -9,但我得到了一个僵尸进程,我无法用 杀死它kill -9。如何杀死僵尸进程?

如果僵尸进程是一个死进程(已经被杀死),我该如何将其从输出中删除ps aux

root@OpenWrt:~# anyprogramd &
root@OpenWrt:~# ps aux | grep anyprogram
 1163 root      2552 S    anyprogramd
 1167 root      2552 S    anyprogramd
 1169 root      2552 S    anyprogramd
 1170 root      2552 S    anyprogramd
10101 root       944 S    grep anyprogram
root@OpenWrt:~# pidof anyprogramd
1170 1169 1167 1163
root@OpenWrt:~# kill -9 1170 1169 1167 1163
root@OpenWrt:~# ps aux |grep anyprogram
 1163 root         0 Z    [anyprogramd]
root@OpenWrt:~# kill -9 1163
root@OpenWrt:~# ps aux |grep anyprogram
 1163 root         0 Z    [anyprogramd]

解决方案 1:

僵尸已经死了,所以你不能杀死它。要清理僵尸,它的父进程必须等待它,所以杀死父进程应该可以消灭僵尸。(父进程死后,僵尸将由 pid 1 继承,它将等待它并清除进程表中的条目。)如果你的守护进程正在生成成为僵尸的子进程,那么你就有了一个错误。你的守护进程应该注意到它的子进程何时死亡,并wait确定它们的退出状态。

以下是向僵尸进程的每个父进程发送信号的示例(请注意,这非常粗糙,可能会杀死您不想要的进程。我不建议使用这种大锤):

# Don't do this.  Incredibly risky sledge hammer!
kill $(ps -A -ostat,ppid | awk '/[zZ]/ && !a[$2]++ {print $2}')

解决方案 2:

您可以使用以下命令杀死僵尸进程的父进程来清理僵尸进程:

kill -HUP $(ps -A -ostat,ppid | awk '{/[zZ]/{ print $2 }')

解决方案 3:

我试过:

ps aux | grep -w Z   # returns the zombies pid
ps o ppid {returned pid from previous command}   # returns the parent
kill -1 {the parent id from previous command}

这会起作用:)

解决方案 4:

http://www.linuxquestions.org/questions/suse-novell-60/howto-kill-defunct-processes-574612/找到它

2)这是另一位用户的一个很好的建议(感谢 Bill Dandreta):有时

kill -9 <pid>

不会终止进程。运行

ps -xal

第四个字段是父进程,杀死僵尸的所有父母,僵尸就死了!

例子

4 0 18581 31706 17 0 2664 1236 wait S ? 0:00 sh -c /usr/bin/gcc -fomit-frame-pointer -O -mfpmat
4 0 18582 18581 17 0 2064 828 wait S ? 0:00 /usr/i686-pc-linux-gnu/gcc-bin/3.3.6/gcc -fomit-fr
4 0 18583 18582 21 0 6684 3100 - R ? 0:00 /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/cc1 -quie

18581,,是僵尸18582——18583

kill -9 18581 18582 18583

没有效果。

kill -9 31706

消灭僵尸。

解决方案 5:

我试过

kill -9 $(ps -A -ostat,ppid | grep -e '[zZ]'| awk '{ print $2 }')

它对我有用。

解决方案 6:

将这里的几个答案组合成一个优雅的方法,在杀死它之前确认哪个进程已经变成僵尸进程。将脚本添加到.bashrc/.zshrc并运行killZombie命令。

killZombie() {
    pid=$(ps -A -ostat,ppid | awk '/[zZ]/ && !a[$2]++ {print $2}');
    if [ "$pid" = "" ]; then
        echo "No zombie processes found.";
    else
        cmd=$(ps -p $pid -o cmd | sed '1d');
        echo "Found zombie process PID: $pid";
        echo "$cmd";
        echo "Kill it? Return to continue… (ctrl+c to cancel)";
        read -r;
        sudo kill -9 $pid;
    fi
}

解决方案 7:

有时父 ppid 无法被杀死,因此杀死僵尸 pid

kill -9 $(ps -A -ostat,pid | awk '/[zZ]/{ print $2 }')

解决方案 8:

在 Mac 上,上述命令/说明均不起作用。要删除僵尸进程,您可以右键单击 docker-icon->troubleshot->clean/purge Data。

在此处输入图片描述

解决方案 9:

以上方法我不敢尝试。

我的解决方案是使用 htop,然后检测哪个进程具有 multiprocessing.spawn 并用 -9 将其杀死。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用