プロセスがX秒以上実行されていることをどのように検出し、それに対処できますか?

プロセスがX秒以上実行されていることをどのように検出し、それに対処できますか?

私はDebianを使用しています。

mp3を生成するためにffmpegプロセスを呼び出します。これはshell_execを使用するPHPスクリプトから呼び出されます。これは99%の場合にうまく機能します。

場合によっては、ffmpegプロセスが終了せず、ffmpegが数時間実行されることがあります。パラメータをゆっくり調整しているため、発生頻度は減りましたが、まだ時々発生します。

トップレベルのプロセスを見ると、CPUとディスクが消費されていますが、プロセスがシャットダウンしていないことを時々見ることができます。

993 www-data 20 0 252012 38904 27384 R 99.7 1.9 390:09.84 ffmpeg

私は通常、プロセスを探し、実行されるパラメータが私のPHPスクリプトと一致することを確認して、プロセスが正しいことを確認します。

ps -eo args | grep ffmpeg

次にプロセスIDを取得して終了し、処理中のファイルを見つけてそのファイルも削除します。

-rw-r--r-- 1 www-data www-data 14G Feb 9 21:20 cfcd208495d565ef66e7dff9f98764da.mp3- ああ

どの単語をGoogleで検索するのかわかりません。

X秒以上実行されたすべてのプロセスを出力し、そのプロセスの詳細をパラメータとプロセスを一致させることができるプロセスにリンクできるSupervisord / cronジョブを介して実行できる監視プロセスまたはスクリプトに関するアイデアを探しています。スクリプトはパターンと一致し(ある種の不快な正規表現を使用したい)プロセスを終了し、その引数に一致するすべてのファイルを削除します。

答え1

あなたはそれを使用することができます停止する制限時間のあるコマンドを実行します。

たとえば、

timeout 2 yes

2秒間「y」を表示します(そうでなければ永久に続きます)。

関連情報