Μετάβαση στο περιεχόμενο

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

Η κοινή φιλοξενία, τα ενισχυμένα κοντέινερ και ορισμένες πλατφόρμες 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. Δείτε τους Παράλληλους εργαζομένους.

Με απενεργοποιημένα τα 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, επειδή κάθε έλεγχος είναι εντολή. Δημιουργήστε τον πίνακα δυνατοτήτων σε μηχάνημα που επιτρέπει διεργασίες.