#22452 [Opn->Fbk]: Background script stalls after 300 seconds
| From: | iliaa@php.net | Date: | Thu, 27 Feb 2003 14:06:56 +0000 |
| Subject: | #22452 [Opn->Fbk]: Background script stalls after 300 seconds | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-34410@lists.php.net to get a copy of this message | ||
ID: 22452
Updated by: iliaa@php.net
Reported By: mikan at playcollective dot com
-Status: Open
+Status: Feedback
Bug Type: Scripting Engine problem
Operating System: Linux (RedHat 7.2)
PHP Version: 4.3.0
New Comment:
Please try using this CVS snapshot:
http://snaps.php.net/php4-STABLE-latest.tar.gz
For Windows:
http://snaps.php.net/win32/php4-win32-STABLE-latest.zip
Previous Comments:
------------------------------------------------------------------------
[2003-02-27 05:50:07] mikan at playcollective dot com
I've been developping a daemon-script that runs in the background,
after being spawned from the parent script.
i use an:
// we are parent. spawn child and exit.
$sock = fsockopen (getenv("SERVER_NAME"), 80);
if(!$sock){
echo "ERROR: $errstr ($errno)\n";
} else {
if(socket_set_blocking($sock, false)){
fputs($sock, "GET ".getenv("REQUEST_URI")."?child=1
HTTP/1.1\n");
fputs($sock, "Host: ".getenv("SERVER_NAME")." \n");
fputs($sock, "Connection: close\n\n");
fclose($sock);
} else {
echo "ERROR: blocking socket. execution halted.\n";
exit();
}
}
to spawn the child process (fork is not supported on the system this
script is developed for). this code essentially opens a non-blocking
socket to itself, with the variable child=1, and exits. the child
process is now running.
this child process starts with:
set_time_limit (0);
ignore_user_abort(true);
to be able to run "forever"...
after this it goes into an eternal while loop.
now, the problem is the following: if nothing happens within the loop
(e.g. no output is produced, the script only checks and sleeps) the
script halts (but doesn't die/exit) after exactly 300 seconds. the
process still exists in the process list on the server.
if the script produces an non-fatal error within every 300 seconds, it
continues running happily for hours and hours and hours.
i tried outputting a "boo" message using echo "boo"; every ten seconds,
and that didn't seem to work. i tried flushing after echoing, that
didn't work either. now i free a mysql-result that doesn't exist, and
that DOES work!
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=22452&edit=1