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