Зомби-процесс (убить как дочерний, так и родительский процесс)

Вопрос: Я хочу убедиться, что и дочерний, и родительский процессы будут уничтожены и выведены на экран в случае успеха или нет. Я новичок в использовании сценария 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) читать это состояние выхода.

С другой стороны, чтобы убить родительский процесс любого процесса (включая Zombie), вы можете легко использовать комбинацию команд 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), поскольку это не позволяет процессу выполнять какую-либо очистку и может привести к нежелательным последствиям.

Другие вопросы по тегам