Lemme mich zunächst mit einer grundlegenden Beschreibung des Codes, den ich habe. Ich beginne mit einem Haupt-Eltern-Prozess (Hinweis: Ich zeige nicht alle Funktionen der Einfachheit halber. Lassen Sie mich wissen, wenn Sie mich brauchen, um an irgendeinem Punkt zu erweitern):
%Vor%Hier ist was passiert:
Laß mich wissen, ob das mehr Details benötigt / keinen Sinn ergibt. Ich kann nicht herausfinden, warum das erste Mal die Kinder richtig töten würden, aber das zweite Mal nicht.
Der Even-WEIRDER-Teil ist, dass wenn ich es ändere, so dass ich meinen Neustart-Handler so ändere, dass er versucht, das Kind mit einem SIGINT zu töten, jedes Mal fehlschlägt, aber wenn ich ihm einen SIGKILL-Befehl sende, tötet er das Kind Prozess:
%Vor%Ich brauche das Kind, damit es von SIGINT getötet werden kann, um es richtig zu handhaben. Ich will es nicht nur SIGKILL. Gibt es einen Grund, warum das 2. Mal um SIGINT nicht funktioniert, aber SIGKILL wird?
Zuerst müssen Sie nicht verzweigen. Ihr Code macht eine Exec innerhalb des Kinds, Sie könnten im Grunde nur die Exec ohne Forking ausführen, und das Betriebssystem wird Ihren Befehl als Kind hervorbringen. Wenn Sie fork verwenden möchten, setzen Sie include
auf die Datei im Child-Objekt und nicht auf das Executing-Objekt.
Wenn du fork benutzt, musst du waitpid
für die Kinder verwenden. Also, in Ihrem Code müssen Sie etwas einfügen wie:
Überprüfen Sie mehr unter: Ссылка
Tags und Links php fork subprocess kill-process pcntl