プロセスが制限されたホスト
共有ホスティング、強化されたコンテナ、一部のPaaSプラットフォームでは、disable_functionsを通じてプロセス関数が無効になっています。Grephの検索、書き換え、インデックス操作はPHPプロセス内で実行されるため、その環境でも動作します(並列スキャンでは可能な場合にワーカープロセスをフォークします)。
プロセスを起動する処理
| コード | 関数 | 用途 |
|---|---|---|
Greph\Support\ToolResolver |
shell_exec() |
PATH上で外部のgrep、rg、sg(またはnpm)およびghのバイナリを特定する |
Greph\Support\CommandRunner |
proc_open() |
これらのバイナリとGreph実行ファイルをサブプロセスとして実行する |
Greph\Parallel\WorkerPool |
pcntl_fork() |
-j N / jobs: N用の並列ワーカー |
ToolResolverとCommandRunnerは、比較ツール、つまり機能マトリクス生成ツール、ベンチマークハーネス、オラクルテストハーネスでのみ使用されます。Greph::search*()、Greph::rewriteAst()、インデックスビルダー、および4つの実行ファイルはこれらを呼び出しません。
ワーカープールはフォークする前にfunction_exists('pcntl_fork')を確認します。disable_functionsに記載された関数はPHPからは存在しないものとして扱われるため、そのようなホストでは各チャンクがプロセス内で実行され、-j 1と同じ結果になります。並列ワーカーを参照してください。
proc_open、shell_exec、exec、system、passthru、popen、pcntl_forkをすべて無効にしても、jobs: 4を使ったテキスト検索、AST書き換え、greph-index build、greph-index ast-cache build、search、およびrgとsgのラッパーはすべて通常どおり動作します。
プロセス無効時のヘルパー
このようなホストに比較ヘルパーを組み込む場合は、プロセス無効ポリシーを明示して構築してください。
use Greph\Support\CommandRunner;
use Greph\Support\ToolResolver;
$toolResolver = ToolResolver::processDisabled();
$commandRunner = CommandRunner::processDisabled();
これらのインスタンスは安全側に倒して失敗します。検索やコマンドを実行すると、プロセスの起動を試みずにRuntimeExceptionをスローします。
Process-based tool lookup is disabled; cannot resolve binary: rg
Process execution is disabled; cannot run command: rg --version
ToolResolverまたはCommandRunnerを受け取る場所ならどこでも渡せます。たとえば、Greph\FeatureMatrix\FeatureMatrixGeneratorのtoolResolver:およびcommandRunner:引数です。これにより生成ツールはプロセスを起動せずに完了しますが、有用なレポートは生成できません。上流ツールへのプローブはUnavailableとして報告され、Greph自身の実行ファイルを実行するプローブはFailとして報告されます。すべてのプローブがコマンドだからです。プロセスを許可するマシンで機能マトリクスを生成してください。