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-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 /etc/init.d/daemonToStart
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.
Versuchen Sie, > /dev/null 2>&1 &
an den Befehl anzuhängen.
Also das:
%Vor%Nur für den Fall, dass Sie wissen wollen, was es tut / warum:
> /dev/null
- STDOUT nach / dev / null umleiten (mit anderen Worten: blackhole) 2>&1
- STDERR zu STDOUT umleiten (auch blackhole) &
detachiere den Prozess und starte ihn im Hintergrund 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 ' &
' 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%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:
/dev/null 2>&1 &
an das Ende Ihres Befehls an. Dadurch werden Fehler zur Standardausgabe umgeleitet. Sie können diese Ausgabe dann zum Debuggen verwenden. exec('echo $PATH; whoami;)
aufrufen. Dies sagt Ihnen, unter welchem Benutzer PHP läuft, und es ist die aktuelle PATH-Variable. Tags und Links php daemon zombie-process