never mind... pcntl_wait($status); should be commented out.. On Sat, Nov 15, 2014 at 12:14 PM, bruce <badouglas@xxxxxxxxx> wrote: > what's the issue here?? > > Got a quick test of the php pnctl funcs. > > Basically, simply trying to run a number of child functions in > parallel. I was under the impression that forking off the processes > would essentially run them in parallel/simultaneously. > > I have a parentApp, as well as a child.php that I include. > > When I run the test, the fork stuff runs.. but it runs sequentially. > So I'm not sure what I've missed.. > > My expectation is that the test/parent would quickly fire off all > instances of the forked process, and in the procTBL, I'd be able to > see a number of the children running at the same time.. > > I can more or less get this behaviour, if I replace the forked section > with a "system(foo.php &) > > > The test is: > #!/usr/bin/php > <?php > /* > * FileName: testfork.php > * > * quick test of the php fork > * > * > */ > > $maxCount=1000; //restart/recreate the GearmanWorker very > masterCount iterations > $mCount=0; > $rStart=true; > $pid=array(); > $i=0; > > > print "Waiting for a job...\n"; > > #while($worker->work()); > //$worker->work(); > > /* > -start the top level check to see if the > queue/proc is running. > -the logic being, if the queue isn't running, the > stats_check will not have the "." so the loop does > a sleep/wait and tries again.. this continues > until the queue runs.. > -when the queue is running.. the loop then performs > as normal.. however in the normal process, the > logic now also checks to see if the JobCronProcess > is requesting the job/queues, or if the queue isn't > running.. > -if the JobCronProcess is requesting, the > logic then sets the pid in the fooProcessQueuePID.dat > */ > > > $top=true; > $aa=0; > while($top) > { > $p1=posix_getpid(); > $p1=trim($p1); > > > //$pidcount="pgrep -f 'testfork' | wc -l"; > $pidcount='ps aux | grep "testfork" | grep "Child" | grep > -v "grep" | wc -l'; > > //$count=`$pidcount`; > $count=1; > if((int)trim($count)<$maxCount+1) > { > print "hh \n"; > print "in queue ".$p1." --firing off work \n"; > > $data="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; > fork1($data,$aa); > $aa=$aa+1; > //sleep(1); > if($aa==5) > exit(); > } > else > { > $top=""; //x num of children happened > //- force recreation of the worker > //sleep(5);//wait a bit > } > > } > > > exit(); > > > /* > setup the function to process the data on the > fork > > process the data, update the required tbl(s) > update the required/associated tmp db/tbl/queues > as well as the associated parse/crawl tbls > create/build the required FetchRequestQueue > packet/data for the next level of the > crawl if required > */ > function fork1($data,$i) { > print "ed \n"; > global $pid; > if(strlen($data)>0) > { > $pid[$i] = pcntl_fork(); > if($pid[$i] == -1) { > die("could not fork"); > } else if($pid[$i]) { > pcntl_wait($status); > } else { > print "fork \n"; > func1($data); > exit(); > } > } > } > > function func1($data) > { > $child="forkfunc1.php"; > include($child); > } > > > > ?> > > > <?php > /* > * FileName: forkfunc1.php > * forkfunc1.php > * > * test include file/function for the testfork > * > */ > > $includeLib=getenv('yolo_masterYoloMasterApps_IncludeDirPhp'); > include($includeLib.'/DB_conf_inc.php'); > > > /* > setup db access > setup to use tcp - instead of localhost/sockets... > */ > //$pdo_def="mysql:host=".$dbhost.";dbname=".$dbname; > $pdo_def="mysql:host=".$dbhost.";port=".$dbport.";dbname=".$dbname; > $pdo = new PDO($pdo_def,$dbuser,$dbpass); > > > > /* > //--simulate time in app.. > sleep (20); //20 secs.. > > print "here func"; > > exit(); > > > ?> -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php