ID: 18833 Comment by: simeonl at dbc dot co dot nz Reported By: antoine dot bajolet at tdf dot fr Status: No Feedback Bug Type: *General Issues Operating System: GNU/Linux 2.4.9 RH 7.1 PHP Version: 4.2.1 New Comment:
I got the same problem with a CLI script running repeated exec commands. PHP 5.2.11-0.dotdeb.1 with Suhosin-Patch 0.9.7 (cli) (built: Sep 19 2009 23:21:37) Copyright (c) 1997-2009 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies with Suhosin v0.9.29, Copyright (c) 2007, by SektionEins GmbH (Debian - Lenny) Adopting the suggested "user_proc_exec" workaround has fixed the problem, which does suggest the exec might not be closing it's pipes properly. Previous Comments: ------------------------------------------------------------------------ [2009-12-19 12:39:56] klaus dot wendel at lednew dot de I've forgotten: Please aslo add a $result = explode("\n",trim($result)); function user_proc_exec ($command,& $result,& $status) { $process = proc_open( $command, array( 0 => array("pipe", "r"), //STDIN 1 => array("pipe", "w"), //STDOUT 2 => array("pipe","w")), //STDERR $pipes ); $result = stream_get_contents($pipes[1]); $error = stream_get_contents($pipes[2]); fclose($pipes[1]); fclose($pipes[2]); $status= proc_close($process); $result = explode("\n",trim($result)); return($error); } ------------------------------------------------------------------------ [2009-12-19 12:26:49] klaus dot wendel at lednew dot de [Ubuntu karmic 9.10; php-cli 5.2.10] > The per-user process number limit is set in > /etc/security/limits.conf. > In my case, it was enough to raise it and reboot. In my case, this wasn't the answer, unfortunately. Or fortunately, because I was forced to find a workaround, which could help others, too. In my code I replaced exec by following function: function user_proc_exec ($command,& $result,& $status) { $process = proc_open( $command, array( 0 => array("pipe", "r"), //STDIN 1 => array("pipe", "w"), //STDOUT 2 => array("pipe","w")), //STDERR $pipes ); $result = stream_get_contents($pipes[1]); $error = stream_get_contents($pipes[2]); fclose($pipes[1]); fclose($pipes[2]); $status= proc_close($process); return($error); } Everything is working fine now. ------------------------------------------------------------------------ [2009-05-04 14:42:05] scherbakov_koksa at mail dot ru It seems I've finally figured out the reason (after a huge amount of googling UNIX forums). The PHP fork() error is accompanied by the following entries in Apache error_log: [Mon May 04 20:55:59 2009] [alert] (11)Resource temporarily unavailable: setuid: unable to change to uid: 48 [Mon May 04 20:55:59 2009] [alert] Child 10053 returned a Fatal error... Apache is exiting! The system configuration doesn't allow Apache to execute more than N child processes simultaneously. Apache runs out of this limit and can't start any more processes. Hence is the error. The per-user process number limit is set in /etc/security/limits.conf. In my case, it was enough to raise it and reboot. ------------------------------------------------------------------------ [2009-03-09 13:33:36] steveg at bscopes dot com 1. did you ever figure out what caused this problem? 2. do you know which apache/php parameters to adjust ? ------------------------------------------------------------------------ [2009-02-05 11:37:09] scherbakov_koksa at mail dot ru I'm having the same issue with PHP 5.2.8, Apache 2.2.11, GNU/Linux (2.6.20-1.2320.fc5). A php script periodically (per user request) executes the following command: xsltproc <filename> <filename> In some time the script starts throwing the "unable to fork" warning. It is fixed by Apache restart. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/18833 -- Edit this bug report at http://bugs.php.net/?id=18833&edit=1