Re: php/forking...

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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





[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux