Hi all, I have a problem with PHP passthru() blocking when it is supposed to start a daemon and return.
I have a Node.js daemon with a bash script wrapper around it. Users can call this bash script directly, but it is also used by our deployment system. Our deployment system uses Phing, and Phing uses `exec()` and `passthru()` internally to cann external programs. The bash script wrapper around my Node.js uses a bit of process replacement because my Node.js server can't directly log to syslog. Normally I'd start Node.js like this: forever -l app.log app.js But because I want it to log to syslog, I put this in the bash script: forever -l >(logger) app.js The `logger` process replacement creates a file descriptor into syslog like /dev/fd/63 whose path is passed to the forever command as the logfile to use. This works great when I start the daemon using the bash script directly, but when the bash script is executed using PHP passthru() or exec() then these calls will block. If I use a regular logfile instead of the process replacement then both passthru() and exec() work just fine, starting the daemon in the background. I have created a complete working example (using a simple PHP daemon instead of Node.js) on Github's Gist: https://gist.github.com/1977896 (needs PHP 5.3.6+) Why does the passthru() call block on the process replacement? And is there anything I can do to work around it? Kind regards, -- Sander Marechal -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php