
# Resursdatori ar procesu ierobežojumiem

Koplietojamā mitināšanā, ierobežotos konteineros un dažās PaaS platformās procesu funkcijas tiek atspējotas, izmantojot `disable_functions`. Greph meklēšanas, pārrakstīšanas un indeksēšanas darbības tiek izpildītas PHP procesā (paralēlā skenēšanā, ja iespējams, tiek atdalītas darbinieku kopijas), tāpēc šajās vidēs tās turpina darboties.

## Kas palaiž procesus

| Kods | Funkcija | Lietojums |
|---|---|---|
| `Greph\Support\ToolResolver` | `shell_exec()` | Ārējo `grep`, `rg`, `sg` (vai `npm`) un `gh` bināro failu atrašana sistēmā `PATH` |
| `Greph\Support\CommandRunner` | `proc_open()` | Šo bināro failu un Greph izpildāmo failu palaišana kā apakšprocesiem |
| `Greph\Parallel\WorkerPool` | `pcntl_fork()` | Paralēlie darbinieki `-j N` / `jobs: N` |

`ToolResolver` un `CommandRunner` tiek izmantoti tikai salīdzināšanas rīkos: funkciju matricas ģeneratorā, etalonmērījumu vidē un orākula testu vidē. `Greph::search*()`, `Greph::rewriteAst()`, indeksu veidotāji un četri izpildāmie faili tos nekad neizsauc.

Darbinieku pūls pirms procesu atdalīšanas pārbauda `function_exists('pcntl_fork')`. Funkcija, kas norādīta `disable_functions`, PHP skatījumā nepastāv, tāpēc šādā resursdatorā katrs datu gabals tiek apstrādāts vienā procesā ar tādu pašu rezultātu kā `-j 1`. Skatiet sadaļu [Paralēlie darbinieki](https://greph.inline0.dev/lv/docs/advanced/parallel).

Ja `proc_open`, `shell_exec`, `exec`, `system`, `passthru`, `popen` un `pcntl_fork` ir atspējoti, teksta meklēšana ar `jobs: 4`, AST pārrakstīšana, `greph-index build`, `greph-index ast-cache build` un `search`, kā arī `rg` un `sg` apvalki darbojas kā parasti.

## Palīgrīki režīmam bez procesiem

Iegultot salīdzināšanas palīgrīkus šādā resursdatorā, izveidojiet tos ar skaidri norādītu politiku bez procesiem:

```php
use Greph\Support\CommandRunner;
use Greph\Support\ToolResolver;

$toolResolver = ToolResolver::processDisabled();
$commandRunner = CommandRunner::processDisabled();
```

Šīs instances drošības nolūkos pārtrauc darbību: katra meklēšana vai komanda izmet `RuntimeException`, nevis mēģina palaist procesu.

```text
Process-based tool lookup is disabled; cannot resolve binary: rg
Process execution is disabled; cannot run command: rg --version
```

Padodiet tās tur, kur tiek pieņemts `ToolResolver` vai `CommandRunner`, piemēram, `Greph\FeatureMatrix\FeatureMatrixGenerator` argumentos `toolResolver:` un `commandRunner:`. Ģenerators pabeidz darbu, nepalaižot procesu, taču nevar izveidot noderīgu pārskatu: zondes, kas pārbauda augšupējā līmeņa rīkus, tiek atzīmētas kā `Unavailable`, bet zondes, kas palaiž pašas Greph izpildāmos failus, — kā `Fail`, jo katra zonde ir komanda. Ģenerējiet [funkciju matricu](https://greph.inline0.dev/lv/docs/advanced/feature-matrix) datorā, kurā procesi ir atļauti.
