在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
<?php /** * Created by PhpStorm. * User: lost * Date: 14-2-10 * Time: 上午10:51 * fork 中必须以cli 命令行方式运行 以web 形式运行的化 只能运行父进程 * 例如 * /usr/local/php/bin/php /Users/lost/www-nginx/libevent/fork.php * * 用过的chr()函数,(这是一个把输入的ASCII数字码转义为对应的ASCII字符的函数,在某些特殊字符被过滤的时候,尤其有用) * 命令行下用chr(10) 换行 */ print 'parent pid is:'.getmypid().chr(10); $pid = pcntl_fork(); if($pid > 0){//父进程 print 'im parent and child pid is :'.$pid.chr(10); } else if($pid == -1){ print 'could not fork'; }else{//子进程 print 'im child and my pid is:'.getmypid().chr(10); } 例子2: //创建3个子进程 $pids = array();//子进程的进程号 $pid = pcntl_fork(); for($i =0 ; $i < 3 ; $i++){ if($pid == -1){ print "不能创建子进程".chr(10); }else if($pid){ //父进程里$pid为子进程的进程号 //print '子进程号:'.$pid.chr(10); print '父进程号:'.getmypid().chr(10); $pid = pcntl_fork(); $pids[] = $pid; }else{ print '子进程号:'.getmypid().chr(10); } } 父进程号:4677
根据例子2 如果分别想在子进程里做不同的事情//创建3个子进程 $pids = array();//子进程的进程号 $excutable = array( 'test1' => true, 'test2' => true, 'test3' => true ); 父进程号:4819
//每5秒会输出
test2:method execute
根据上面的代码 得到最后一种 (假如在子进程执行第一次完毕后就把他kill掉的话就完美的实现了每次循环父进程只会分配一个子进程而不会让子进程再次循环生成仔仔进程) //创建3个子进程 $pids = array();//子进程的进程号 for($i =0 ; $i < 3 ; $i++){ $pids[$i] = pcntl_fork(); if($pids[$i] == -1){ print "不能创建子进程".chr(10); }else if($pids[$i]){ pcntl_wait($status);//如果需要同时进行多个进程 请注释此行 因为会导致父进程阻塞 }elseif($pids[$i] == 0){ $pid = getmypid(); print '子进程号:'.getmypid().chr(10); posix_kill($pid, SIGTERM);//杀掉子进程 防止子进程再生成子进程 } } 结果: 子进程号:5754 子进程号:5755 子进程号:5756
|
2022-08-17
2022-11-06
2022-07-18
2022-07-29
2022-07-29
请发表评论