php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #22452 Background script stalls after 300 seconds
Submitted: 2003-02-27 05:50 UTC Modified: 2003-03-09 19:16 UTC
From: mikan at playcollective dot com Assigned:
Status: No Feedback Package: Scripting Engine problem
PHP Version: 4.3.0 OS: Linux (RedHat 7.2)
Private report: No CVE-ID: None
View Add Comment Developer Edit
Anyone can comment on a bug. Have a simpler test case? Does it work for you on a different platform? Let us know!
Just going to say 'Me too!'? Don't clutter the database with that please — but make sure to vote on the bug!
Your email address:
MUST BE VALID
Solve the problem:
38 - 5 = ?
Subscribe to this entry?

 
 [2003-02-27 05:50 UTC] 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!


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2003-03-09 19:16 UTC] sniper@php.net
No feedback was provided. The bug is being suspended because
we assume that you are no longer experiencing the problem.
If this is not the case and you are able to provide the
information that was requested earlier, please do so and
change the status of the bug back to "Open". Thank you.


 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Fri Apr 26 21:01:29 2024 UTC