僵尸进程(杀死子进程和父进程)

僵尸进程(杀死子进程和父进程)

问题:我想确保子进程和父进程都被终止,并回显成功与否。我是 Bash 脚本的新手,我的输出有问题。

#!/bin/bash
for p in $(ps jauxww | grep Z | grep -v PID | awk '{print $3}'); do
for everyone in $(ps auxw | grep $p | grep cron | awk '{print $2}');do
kill -9 $everyone;
echo(Detected zombie process:"$PID". "$usr": . Successfully Killed);
else
echo (Detected zombie process:"$PID".  "$usr": . Could not kill);
done;
done;

答案1

您无法杀死僵尸,它已经死了。它只是在父进程读取wait(2)其退出状态之前在进程表中创建一个条目。

另外,要杀死任何进程(包括僵尸进程)的父进程,您可以轻松使用命令ps和的组合kill

ps -p <pid> -o ppid=

将使用具有 PID(进程 ID)的进程的 PPID(父进程 ID)<pid>

例如,要查找具有 PID 的进程的 PPID 2345

ps -p 2345 -o ppid=

您可以kill使用命令替换将其传递给$()

kill "$(ps -p 2345 -o ppid=)"

另一方面,要使用其 PPID 终止进程,请使用pkill

pkill -P <PPID>

例如,终止具有 PPID 的进程1234

pkill -P 1234

此外,除非绝对必要,否则不要使用SIGKILLkill -9),因为它不允许进程进行任何清理,并可能会导致不良影响。

相关内容