プロセスを開始して監視するためにPHPスクリプトを作成しています。以前にこれを行ったことがありますが、まれなps <pid>
ケースですが、プロセスが実際に終了した後に関連していないプロセスが同じpidで実行されていたため、信頼できませんでした。
そのため、PHPスクリプトが起動されたプロセスであることを確認できるように、コマンドにランダムな文字列を追加したいと思います。これを行うための私のオプションは何ですか?
これまで私はこれを思い出しました。
"USELESS_VAR_0nQjdXR45P=\"{$cmdRandomString}\" | $cmd"
ここで、 $cmd は実行する実際のコマンドです。 $ cmdRandomStringは私が追加したランダムな文字列です。しかし、何らかの理由でps aux
役に立たない変数はここには表示されません。
ほぼ終わるからでしょうか?
ダミーコマンドオプションも追加してみましたが、--xxxx=yyyy
オプションがわからないため、コマンドは致命的なエラーを返します。
これを行う方法はありますか?それとも、信頼できないPIDに加えてプロセスを識別する他の信頼できる方法はありますか?
答え1
信頼できないPIDに加えて、プロセスを識別する他の信頼できる方法はありますか?
これを確実に行う方法は、プロセスを直接開始し、プロセスが終了したときにそれをキャプチャすることです。たとえば、UNIX信号SIGCHILDを受信します。たとえば、子供の死亡通知を使用するまで、PIDは存在し続けます(「ゾンビ」と呼ばれる状態)waitpid()
。
場合によっては、これをプロセスマネージャデーモン(たとえば)に委任する必要がありますsystemd
。たとえば、を使用してクエリを実行できますsystemctl status my-process.service
。これは、長期実行プロセス(デーモンなど)を開始する必要があるPHP Webページがある場合に便利です。