
Я пишу PHP-скрипт для запуска и мониторинга процессов. Я использовал ps <pid>
это, но в редких случаях это ненадежно, так как после того, как мой процесс фактически завершился, был запущен нерелевантный процесс с тем же pid.
Поэтому я хотел добавить случайную строку в свою команду, чтобы мой PHP-скрипт мог быть уверен, что это тот процесс, который он запустил. Какие у меня есть варианты сделать это?
На данный момент я придумал следующее:
"USELESS_VAR_0nQjdXR45P=\"{$cmdRandomString}\" | $cmd"
Где $cmd — это фактическая команда, которую я хотел выполнить. $cmdRandomString — это случайная строка, которую я добавил. Но по какой-то причине ps aux
здесь не отображается бесполезная переменная var.
Потому что он быстро закончился?
Я также пытался добавить фиктивную опцию команды, например, --xxxx=yyyy
но команда возвращала фатальную ошибку, не зная опции.
Есть ли способ это сделать? Или есть какой-то надежный способ идентифицировать процесс, кроме ненадежного pid?
решение1
Есть ли какой-либо надежный способ идентификации процесса, кроме ненадежного pid?
Надежный способ сделать это — запустить процесс самостоятельно и перехватить его, когда он умирает, например, вы получаете сигнал unix SIGCHILD. PID будет продолжать существовать (в состоянии, которое называется «зомби»), пока вы не получите уведомление о смерти ребенка, например waitpid()
.
В некоторых случаях вам нужно будет делегировать это процессу супервизора демона, например systemd
. Например, тогда вы можете запросить его с помощью systemctl status my-process.service
. Это было бы полезно, если бы у вас была веб-страница PHP, которая должна была запустить длительный процесс, например демон.