PHPでのshell_execの最大実行時間を20秒に制限し、この時間中に生成された出力をフェッチしようとしています。shell_execが20秒未満で終了した場合、スクリプトは直接続行する必要があります。
具体的には、Subversionリポジトリの多数のリビジョンを反復処理する関数を開発しています。リビジョンごとに、svn diffをフェッチし、追加された行数をカウントします。問題は、リビジョンで非常に大きなファイルがコミットされている場合、スクリプトがハングすることです。したがって、私は各svndiffコマンドの実行時間を制限しようとしています。
popen()とsleep()の組み合わせは、100回の反復では実行できない各反復でスクリプトを20秒間スリープさせるように見えるため、オプションではありません。max_execution_timeを設定すると、致命的なエラーが返されるため、オプションではありません。