Вопрос: Я хочу удостовериться, что и дочерний и родительский процесс уничтожается и эхо если успешный или нет. Я являюсь новым при использовании сценария удара и наличии проблемы с моим выводом.
#!/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;
Вы уже не можете уничтожить Зомби, его мертвый. Это просто говорит запись в таблице процессов, прежде чем родительский процесс сделает wait(2)
для чтения это - статус выхода.
На другой ноте, для уничтожения родительского процесса любого процесса (включая Зомби) можно легко использовать комбинацию команд ps
и kill
:
ps -p <pid> -o ppid=
даст использованию PPID (идентификатор Родительского процесса) процесса, имеющего PID (идентификатор Процесса) <pid>
.
Так, например, для нахождения PPID процесса, имеющего PID 2345
:
ps -p 2345 -o ppid=
Можно передать его kill
использование замены команды $()
:
kill "$(ps -p 2345 -o ppid=)"
С другой стороны, для уничтожения процесса с помощью его PPID использовать pkill
:
pkill -P <PPID>
Например, уничтожить процесс, имеющий PPID 1234
:
pkill -P 1234
Также, если не абсолютно необходимо не используйте SIGKILL
(kill -9
) поскольку это не позволяет процессу, чтобы сделать любую очистку и могло бы привести к нежелательным эффектам.