
# Κεντρικοί υπολογιστές με περιορισμούς διεργασιών

Η κοινή φιλοξενία, τα ενισχυμένα κοντέινερ και ορισμένες πλατφόρμες PaaS απενεργοποιούν τις συναρτήσεις διεργασιών μέσω `disable_functions`. Οι λειτουργίες αναζήτησης, επανεγγραφής και δημιουργίας ευρετηρίου του Greph εκτελούνται μέσα στη διεργασία PHP (οι παράλληλες σαρώσεις δημιουργούν αντίγραφα εργαζομένων μέσω fork όταν είναι δυνατό), οπότε εξακολουθούν να λειτουργούν σε αυτά τα περιβάλλοντα.

## Τι εκκινεί διεργασίες

| Κώδικας | Συνάρτηση | Χρήση |
|---|---|---|
| `Greph\Support\ToolResolver` | `shell_exec()` | Εντοπισμός των εξωτερικών δυαδικών αρχείων `grep`, `rg`, `sg` (ή `npm`) και `gh` στο `PATH` |
| `Greph\Support\CommandRunner` | `proc_open()` | Εκτέλεση αυτών των δυαδικών αρχείων και των εκτελέσιμων Greph ως υποδιεργασιών |
| `Greph\Parallel\WorkerPool` | `pcntl_fork()` | Παράλληλοι εργαζόμενοι για `-j N` / `jobs: N` |

Τα `ToolResolver` και `CommandRunner` χρησιμοποιούνται μόνο από τα εργαλεία σύγκρισης: τη γεννήτρια πίνακα δυνατοτήτων, το περιβάλλον δοκιμών επιδόσεων και το περιβάλλον δοκιμών oracle. Τα `Greph::search*()`, `Greph::rewriteAst()`, οι δημιουργοί ευρετηρίων και τα τέσσερα εκτελέσιμα δεν τα καλούν ποτέ.

Η ομάδα εργαζομένων ελέγχει το `function_exists('pcntl_fork')` πριν δημιουργήσει διεργασίες μέσω fork. Μια συνάρτηση που περιλαμβάνεται στο `disable_functions` θεωρείται ανύπαρκτη από το PHP, επομένως σε έναν τέτοιο κεντρικό υπολογιστή κάθε τμήμα εκτελείται εντός της ίδιας διεργασίας, με το ίδιο αποτέλεσμα όπως το `-j 1`. Δείτε τους [Παράλληλους εργαζομένους](https://greph.inline0.dev/el/docs/advanced/parallel).

Με απενεργοποιημένα τα `proc_open`, `shell_exec`, `exec`, `system`, `passthru`, `popen` και `pcntl_fork`, η αναζήτηση κειμένου με `jobs: 4`, η επανεγγραφή AST, τα `greph-index build`, `greph-index ast-cache build` και `search`, καθώς και τα περιβλήματα `rg` και `sg` εκτελούνται κανονικά.

## Βοηθητικά εργαλεία χωρίς διεργασίες

Όταν ενσωματώνετε τα βοηθητικά εργαλεία σύγκρισης σε τέτοιο περιβάλλον, δημιουργήστε τα με ρητή πολιτική απενεργοποίησης διεργασιών:

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

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

Αυτά τα στιγμιότυπα αποτυγχάνουν με ασφάλεια: κάθε αναζήτηση ή εντολή προκαλεί `RuntimeException` αντί να επιχειρήσει να εκκινήσει διεργασία.

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

Περάστε τα όπου γίνεται δεκτό ένα `ToolResolver` ή `CommandRunner`, για παράδειγμα στα ορίσματα `toolResolver:` και `commandRunner:` του `Greph\FeatureMatrix\FeatureMatrixGenerator`. Η γεννήτρια ολοκληρώνεται χωρίς να εκκινήσει διεργασία, αλλά δεν μπορεί να παράγει χρήσιμη αναφορά: οι έλεγχοι στα εργαλεία upstream αναφέρονται ως `Unavailable` και όσοι εκτελούν τα ίδια τα εκτελέσιμα του Greph ως `Fail`, επειδή κάθε έλεγχος είναι εντολή. Δημιουργήστε τον [πίνακα δυνατοτήτων](https://greph.inline0.dev/el/docs/advanced/feature-matrix) σε μηχάνημα που επιτρέπει διεργασίες.
