>[оверквотинг удален]
> Такое только на вашем локалхосте нормально. В дистрибутивных скриптах инициализации за
> это бьют ногами, ибо nginx мог уже упасть, а этот PID
> - быть занят другим процессом.
> Отсутствие вменяемого отслеживания процессов без состояний гонок, которое в systemd реализовано
> через cgroups, в sysvinit является одной из главных проблем. Запускаем процесс
> - а дальше хоть трава не расти. Вот и получаем код
> типа того, что написали вы. (Можно ещё killall mysqld вспомнить в
> официальном, блин, init-скрипте mysql. Я об этом узнал, когда попытка остановить
> зависший сервис БД привела к падению akonadi, у которого прибился локально
> запущенный *пользовательский* экземпляр mysqld.) То что вы запускаете или прибиваете что-то не глядя ещё не говорит о недостатке чего-либо. С дуру можно и ... сломать, если им тыкать куда попало. Ну это вместо во-первых.
Те самые контейнеры процессов (они же контрольные группы процессов) появились в Linux не вчера и не с приходом systemd. Я конечно не буду никак ограничивать фантазию (не вашу, а вообще) их использования, но их основное предназначение не в этом.
*nix не любит дураков. Тем более, - дураков на месте системного администратора. Тем более, если он держит сервер БД на рабочей станции с KDE. :-) (куча смайлов, не воспринимайте близко к сердцу)
Но это не значит, что озвученный вами вопрос нельзя решить без systemd:
if [ -z "$(ps -A | grep $(cat $PID) | grep -v 'nginx')" ]; then
kill -TERM $(cat $PID)
else
echo "Вася ты уже бухой, иди спать!"
fi
и.т.д. по уже накатаной тропке...
Проблема решена, или занимаемся дальше? :-)
P.S. Можно было бы и свести всё к обработке исключения (как в примере с тем же ps выше по треду), но я решил что так будет нагляднее. :-)