一部のキャッシュ・ファイルを生成するために、UNIX プロセスを開始するクライアント・ジョブによってトリガーされる Web サーバーで実行されるスクリプトがあります。このプロセスは顧客が提供したファイルに対して機能するため、時々異常に動作し、あまりにも長く実行され、それを生成したPHPプロセスがタイムアウトしたり、CPU時間を使いすぎてシステム管理者が終了することがあります。
プロセスのCPU時間/実行時間を制限する実行可能なコマンドはありますか?/usr/bin/time
コマンドを実行し、それを実行し、制限したいコマンドラインに渡すことができる同様のコマンドを探しています。
答え1
Gilesの答えに加えてCPU制限ツールは、実行時に修正を含む必要なタスクを正確に実行するように設計されています。また、特定のCPU /コアIIRCにのみ制限できます。
答え2
プログラム内で呼び出されますsetrlimit(RLIMIT_CPU, ...)
。シェルから呼び出されますulimit -t 42
(標準ではありませんが、ほとんどのUNIXバリアント(bashとkshを含む)はほとんどのシェルでサポートされています)。これにより、N秒のCPU時間を使用して現在のプロセスが終了します。この制限は子プロセスに継承されます。一般的なシェル慣用語は、(ulimit -t 42; runaway_process)
後で同じシェルで他のプロセスを無制限に実行できるようにしたい場合です。
また、見ることができますUnixで特定のプロセスが使用できるメモリ量を制限する方法はありますか? 。原則は同じですが、他のリソースが制限されています。
答え3
また、このtimeout
コマンドを使用して、プロセスが指定された時間より長く実行されないようにすることもできます。
はい
$ date
Mon May 6 07:35:07 EDT 2013
$ timeout 5 sleep 100
$ date
Mon May 6 07:35:14 EDT 2013
よりタイムアウトマニュアルページもっと学ぶ。