Nachfolgende Signale von pcntl_signal, die den Handler nicht auslösen

8

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:

  1. Ich beginne mein Skript und ich bekomme die Prozesse richtig (z.B. Parenpid: 2, childpid: 3)
  2. Ich schicke dann dem Elternteil ein SIGHUP-Signal und es tötet richtig und startet einen neuen Kindprozess (z. B. Parenpid: 2, childpid: 4)
  3. Ich schicke dann dem Elternteil ein zweites SIGHUP-Signal und es versucht es richtig und fügt einen neuen Kindprozess hinzu, aber es weigert sich, das 2. childpid zu töten. (z.B. Parenpid: 2, undyingchildpid: 4, newchildpid: 5)

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?

    
Aram Papazian 12.03.2012, 21:54
quelle

1 Antwort

1

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.

%Vor%

Wenn du fork benutzt, musst du waitpid für die Kinder verwenden. Also, in Ihrem Code müssen Sie etwas einfügen wie:

%Vor%

Überprüfen Sie mehr unter: Ссылка

    
capi 02.04.2012 10:44
quelle