Töten Prozesse eröffnet mit popen()?
Ich bin die Eröffnung eines lang andauernden Prozesses mit popen(). Zum Debuggen würde ich gerne den Prozess beenden, bevor es abgeschlossen wurde. Aufruf pclose() nur blockiert, bis das Kind abgeschlossen ist.
Wie kann ich den Prozess? Ich sehe keine einfache Möglichkeit, um die pid aus der Ressource, die popen() gibt, so dass I senden können Sie ein signal.
Ich nehme an, dass ich etwas tun könnte kludgey und versuchen Sie, zu fudge die pid in die Ausgabe mit irgendeiner Art von command-line Hack...
- Dies ist nicht eine Reale Antwort, weil es für C und nicht PHP, aber unter diesem link für einen Vorschlag: monkey.org/openbsd/archive/misc/0112/msg00360.html
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, landete auf eine Lösung: ich wechselte zurück zu
proc_open()
stattpopen()
. Dann ist es einfach:proc_open()
, also versuchte ich die einfacherepopen()
, in der Hoffnung, dass würde helfen. Ich wusste nicht, an der Zeit, dass beidepclose()
undproc_close()
blockieren, bis das Kind bricht. Sobald Sie das erkennen, dann müssen Sie töten das Kind. Töten und das Kind müssen Sie die pid, und das ist nicht sauber zur Verfügung mitpopen()
.proc_open()
tut allespopen()
tut, und dann einige.Senden Sie einfach eine töten (oder Abbrechen) - signal mittels kill-Funktion:
posix_kill()
. Ich nehme an, im Nachhinein, könnte ich mit grep die Liste der child-pids von ps, da ist es einfach, um herauszufinden, meine eigene pid.Finden Sie die pid, und überprüft, dass Sie wirklich seine Eltern tut:
Es funktioniert ganz gut auf einem fast-cgi PHP server.