
プロセスを開始して監視する 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 ページがある場合に役立ちます。