Как добавить бесполезную случайную строку в команду Linux, чтобы ее можно было идентифицировать через ps?

Как добавить бесполезную случайную строку в команду Linux, чтобы ее можно было идентифицировать через ps?

Я пишу 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, которая должна была запустить длительный процесс, например демон.

Связанный контент