Так же, как настоящие зомби, процессы зомби не могут быть убиты - они уже мертвы.
Они уйдут, когда их родительский процесс вызовет wait()
для получения кода выхода, или когда выйдет их родительский процесс.
О, вы вообще не говорите о процессах зомби. Этот bash-скрипт должен соответствовать тому, что вы ищете:
ps -eo uid,pid,lstart |
tail -n+2 |
while read PROC_UID PROC_PID PROC_LSTART; do
SECONDS=$[$(date +%s) - $(date -d"$PROC_LSTART" +%s)]
if [ $PROC_UID -eq 1000 -a $SECONDS -gt 600 ]; then
echo $PROC_PID
fi
done |
xargs kill
Это уничтожит все процессы, принадлежащие UID 1000, которые работали более 10 минут (600 секунд). Вы, вероятно, хотите отфильтровать его только по интересующим вас PID - возможно, по идентификатору родительского процесса или тому подобному? Во всяком случае, так должно быть.