zombie-process

___ qstnhdr ___ Starten eines Daemons aus PHP ___ tag123php ___ PHP ist eine weit verbreitete, dynamische, objektorientierte und interpretierte Skriptsprache, die primär für die serverseitige Webentwicklung entwickelt wurde. ___ tag123daemon ___ Ein Daemon ist ein Prozess oder Programm, der im Hintergrund ausgeführt wird (d. h. keine Benutzerinteraktion erfordert). ___ answer24184535 ___

Ich hatte das gleiche Problem.

Ich stimme DaveRandom zu, du musst jede Ausgabe unterdrücken (stdout und stderr). Aber keine Notwendigkeit, in einem anderen Prozess mit der Endung ' %code% ' zu starten: Die Funktion exec () kann den Rückgabecode nicht mehr überprüfen und gibt OK zurück, selbst wenn ein Fehler aufgetreten ist ...

Und ich bevorzuge es, Ausgaben in einer temporären Datei zu speichern, anstatt "blackhole". Arbeitslösung:

%Vor%

Lesen Sie den Dateiinhalt nach und löschen Sie die temporäre Datei:

%Vor%     
___ answer8387220 ___

Ich habe noch nie versucht, einen Daemon aus PHP zu starten, aber ich habe versucht, andere Shell-Befehle auszuführen, mit vielen Schwierigkeiten. Hier sind ein paar Dinge, die ich in der Vergangenheit versucht habe:

  • Gemäß DaveRandoms Antwort fügen Sie %code% an das Ende Ihres Befehls an. Dadurch werden Fehler zur Standardausgabe umgeleitet. Sie können diese Ausgabe dann zum Debuggen verwenden.
  • Stellen Sie sicher, dass der PATH Ihres Webserver-Benutzers alle referenzierten Binärdateien in Ihrem Daemon-Skript enthält. Sie können dies tun, indem Sie %code% aufrufen. Dies sagt Ihnen, unter welchem ​​Benutzer PHP läuft, und es ist die aktuelle PATH-Variable.
___ qstntxt ___

Für eine Website muss ich einen Daemon-Prozess starten und stoppen können. Was ich gerade mache ist

%Vor%

Der Daemon-Prozess wird gestartet, aber Apache / PHP hängt. Doing a %code% enthüllte, dass sich %code% selbst in einen Zombie-Prozess verwandelte, wodurch alle weiteren Fortschritte effektiv zunichte gemacht wurden. Ist das normal, wenn man versucht, einen Daemon aus PHP zu starten?

Und ja, Apache hat das Recht, den Befehl %code% auszuführen. Ich habe die Datei / etc / sudoers geändert, um dies zu ermöglichen. Nein, ich habe nicht zugelassen, dass Apache in der Lage ist, irgendeine Art von Befehl auszuführen, nur ein paar wenige, damit die Website funktionieren kann.

Wie auch immer, zurück zu meiner Frage, gibt es eine Möglichkeit, PHP zu erlauben, Daemons so zu starten, dass kein Zombie-Prozess erstellt wird? Ich frage das, denn wenn ich das Gegenteil mache, funktioniert das Stoppen eines bereits gestarteten Daemon gut.

    
___ answer8387140 ___

Versuchen Sie, %code% an den Befehl anzuhängen.

Also das:

%Vor%

Nur für den Fall, dass Sie wissen wollen, was es tut / warum:

  • %code% - STDOUT nach / dev / null umleiten (mit anderen Worten: blackhole)
  • %code% - STDERR zu STDOUT umleiten (auch blackhole)
  • %code% detachiere den Prozess und starte ihn im Hintergrund
___ tag123zombieprozess ___ Unter Unix- und Unix-artigen Computerbetriebssystemen ist ein Zombie-Prozess oder ein unterbrochener Prozess ein Prozess, der die Ausführung abgeschlossen hat, aber noch einen Eintrag in der Prozesstabelle hat. Dieser Eintrag wird benötigt, damit der Prozess, der den (jetzt Zombie) Prozess gestartet hat, seinen Exit-Status lesen kann. ___
3
Antworten

Starten eines Daemons aus PHP

Für eine Website muss ich einen Daemon-Prozess starten und stoppen können. Was ich gerade mache ist %Vor% Der Daemon-Prozess wird gestartet, aber Apache / PHP hängt. Doing a ps aux enthüllte, dass sich sudo selbst in einen Zombie-Proze...
05.12.2011, 14:47