Hi.

I am trying to use posix_kill(0, $signo); to signal children forked by the parent. All children seem to be in the processgroup of the parent, but sending either 0 or -10 does not seem to signal the children at all.

What am I doing wrong? I even tried setting the process group (didn't affect anything). It doesn't seem like sending the kill to 0 reaches the children.

Has anybody used pcntl and posix_kill with success and if so, could you provide me a code sniplet?

Here is my main:

   function main()
   {
      global $logfile;
      $logfile = "/tmp/runner.log.".date("Ymd:Hi");

      //posix_setsid();
      pcntl_signal(SIGINT,   array("runner","sig_handler_parent"));
      pcntl_signal(SIGTERM,  array("runner","sig_handler_parent"));
      pcntl_signal(SIGHUP,   array("runner","sig_handler_parent"));
      pcntl_signal(SIGUSR1,  array("runner","sig_handler_parent"));

      do {
         if ($this->numChildren <= MAXCHILDREN && $this->count > 0) {
            $pid = pcntl_fork();
            if ($pid < 0) {
                die("could not fork");
            } elseif ($pid == 0) {
               $ret = $this->child($args);
               exit ($ret);
            } else {
               $this->log("Child Started: [PID:$pid] -> [JOB:test]");
               $this->numChildren++;
               // posix_setpgid($pid,posix_getpgid($this->pid));
               $this->count--;
            }
         }
         // sleep(5);
         $out = pcntl_waitpid ( -1, &$status, WNOHANG );
         if ($out > 0) {
            $this->numChildren--;
         }

} while ($this->count > 0 || $this->numChildren > 1);

      echo "Done \n";
   }

   function sig_handler_parent($signo)
   {
      switch($signo) {
         case SIGINT:
         case SIGUSR1;
         case SIGTERM:
             posix_kill(0, $signo);
             exit;
             break;
         case SIGHUP:
             // handle restart tasks
             echo "SIGHUP\n";
             break;
         default:
             echo "ANOTHER EVENT\n";
             // handle all other signals
      }
   }


-- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php



Reply via email to