#!/usr/bin/php 0) $running_jobs--; print posix_getpid() . ": SIGCHLD received, jobs left: $running_jobs\n"; pcntl_waitpid(-1, $status, WNOHANG); } pcntl_signal(SIGCHLD, 'sigchld_handler'); while (true) { $next_spawn = $last_checkpoint + SPAWN_INTERVAL - time(); print "[MASTER] active jobs: $running_jobs, next spawn at $next_spawn sec\n"; if ($last_checkpoint + SPAWN_INTERVAL < time()) { for ($j = $running_jobs; $j < MAX_JOBS; $j++) { print "[MASTER] spawning client $j..."; $pid = pcntl_fork(); if ($pid == -1) { die("fork failed!\n"); } else if ($pid) { $running_jobs++; print "OK [$running_jobs]\n"; } else { pcntl_signal(SIGCHLD, SIG_IGN); passthru(CLIENT_PROCESS); exit(0); } } $last_checkpoint = time(); } sleep(1); } ?>