php 多进程中的信号问题
1.以下代码sleep时间远小于20
<?php
// 当子进程退出时,会触发该函数
function sig_handler($sig) {
switch($sig) {
case SIGCHLD:
echo 'SIGCHLD received'."n";
}
}
pcntl_signal(SIGCHLD, "sig_handler");// 注册子进程退出时调用的函数
$start = time();
$sub_process_cnt = 20;
for($i=0;$i<$sub_process_cnt;$i++) {
sleep(1);
$pid = pcntl_fork();
if ($pid == 0) {
exit(-1);
}
}
$status = 0;
for ($k=0; $k<$sub_process_cnt; $k++)
{
pcntl_waitpid(-1, $status );
}
$end = time();
$usage = $end - $start;
print "End, use: ".$usage." seconds" ;
?>2.原因:sleep过程中被子进程返回的信号中断。
3.解决办法:
pcntl_signal(SIGCHLD, SIG_IGN ); //忽略子进程返回信号
1.修正BUG站用资源问题,优化程序2.增加关键词搜索3.修改报价4.修正BUG 水印问题5.修改上传方式6.彻底整合论坛,实现一站通7.彻底解决群发垃圾信息问题。注册会员等发垃圾邮件7.彻底解决数据库安全9.修改交易方式.增加网站担保,和直接交易两中10.全站可选生成html.和单独新闻生成html(需要装组建)11. 网站有10中颜色选择适合不同的行业不同的颜色12.修改竞价格排名方式13.修
全部代码如下
立即学习“PHP免费学习笔记(深入)”;
<?php
// 当子进程退出时,会触发该函数
function sig_handler($sig) {
switch($sig) {
case SIGCHLD:
echo 'SIGCHLD received'."n";
}
}
pcntl_signal(SIGCHLD, SIG_IGN );// 注册子进程退出时调用的函数
$start = time();
$sub_process_cnt = 20;
for($i=0;$i<$sub_process_cnt;$i++) {
sleep(1);
$pid = pcntl_fork();
if ($pid == 0) {
exit(-1);
}
}
$status = 0;
for ($k=0; $k<$sub_process_cnt; $k++)
{
pcntl_waitpid(-1, $status );
}
$end = time();
$usage = $end - $start;
print "End, use: ".$usage." seconds" ;
?>










