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 ); //忽略子进程返回信号

全部代码如下

<?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" ; ?>

php 多进程中的信号问题的更多相关文章

  1. 多线程中的信号机制--signwait()函数【转】

    本文转载自:http://blog.csdn.net/yusiguyuan/article/details/14237277 在Linux的多线程中使用信号机制,与在进程中使用信号机制有着根本的区别, ...

  2. Qt5中的信号槽

    Qt4中的信号槽 Qt4中的信号槽是通过SIGNAL,SLOT两个宏,将参数转换成字符串.Qt编译前,会从源码的头文件中提取由signal和slot声明的信号和槽的函数, 将其组成一张信号和槽对应的字 ...

  3. Linux中多线程信号的处理

    1. 博文:Linux多线程中使用信号-1  http://blog.csdn.net/qq276592716/article/details/7325250 2. 博文:Linux多线程信号总结  ...

  4. QRadioButton类中Toggled()信号的使用方法

    QRadioButton类中Toggled()信号的使用方法 1.说明 QRadioButton中,Toggled()信号是在Radio Button状态(开.关)切换时发出的,而clicked()信 ...

  5. 【转贴】gdb中的信号(signal)相关调试技巧

    一篇不错的帖子,讲的是gdb中的信号(signal)相关调试技巧 转自Magic C++论坛  http://www.magicunix.com/index_ch.html  http://www.m ...

  6. 在 docker 容器中捕获信号

    我们可能都使用过 docker stop 命令来停止正在运行的容器,有时可能会使用 docker kill 命令强行关闭容器或者把某个信号传递给容器中的进程.这些操作的本质都是通过从主机向容器发送信号 ...

  7. PyQt5中的信号与槽,js 与 Qt 对象之间互相调用

    一.PyQt中的信号与槽 信号(Signal)和槽(Slot)是Qt中的核心机制,用在对象之间互相通信.在Qt中每个QObject对象和PyQt中所有继承自QWidget的控件(这些都是QObject ...

  8. Flask学习【第6篇】:Flask中的信号

    实例化补充 instance_path和instance_relative_config是配合来用的.这两个参数是用来找配置文件的,当用app.config.from_pyfile('settings ...

  9. 关于IP核中中断信号的使用---以zynq系统为例

    关于IP核中中断信号的使用---以zynq系统为例 1.使能设备的中断输出信号 2.使能处理器的中断接收信号 3.连接IP核到处理器之间的中断 此处只是硬件的搭建,软件系统的编写需要进一步研究. 搭建 ...

随机推荐

  1. 基于visual Studio2013解决C语言竞赛题之1034数组赋值

          题目 解决代码及点评 /********************************************************************** ...

  2. [Java 并发] Java并发编程实践 思维导图 - 第二章 线程安全性

    依据<Java并发编程实践>一书整理的思维导图.

  3. 重操JS旧业第五弹:函数

    函数在任何编程语言中起着非常重要的位置,因为他是功能的最小单元,在js中函数是一种类型 Function 1 申明与定义 显示声明:function cc(){};函数名其实是函数的一个指针,函数名某 ...

  4. html5 canvas 实现一个简单的叮当猫头部

    原文:html5 canvas 实现一个简单的叮当猫头部 html5的canvas是很强大的,今天也是温习了一下之前的基础知识,然后学着做了一个简单的小案例.虽然在这一块几乎空白,但还是乐于尝试... ...

  5. UVA 6480 Zombie Invasion(模拟退火)

    A group of survivors has arrived by helicopter to an isolated island. The island is made up of a lon ...

  6. StackOverFlow的2016统计

    http://stackoverflow.com/research/developer-survey-2016

  7. frame.bounds和center

    CGPoint point=CGPoint(x,y);  //表示位置 CGSize size=CGSzieMake(width,height);  //表示大小 CGRect rect=CGRect ...

  8. Socket 心跳包机制总结

    跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着.事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一 ...

  9. 【Demo 0002】Android 提醒框

    本章学习要点:   //==: Alert Dialog void showAlertDialog() { final Builder builder = new AlertDialog.Builde ...

  10. 禁用viewstate

    <asp:Dropdownlist/>禁用viewstate以后 public partial class _Default : System.Web.UI.Page     {      ...