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 ); //忽略子进程返回信号
全部代码如下
<?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 多进程中的信号问题的更多相关文章
- 多线程中的信号机制--signwait()函数【转】
本文转载自:http://blog.csdn.net/yusiguyuan/article/details/14237277 在Linux的多线程中使用信号机制,与在进程中使用信号机制有着根本的区别, ...
- Qt5中的信号槽
Qt4中的信号槽 Qt4中的信号槽是通过SIGNAL,SLOT两个宏,将参数转换成字符串.Qt编译前,会从源码的头文件中提取由signal和slot声明的信号和槽的函数, 将其组成一张信号和槽对应的字 ...
- Linux中多线程信号的处理
1. 博文:Linux多线程中使用信号-1 http://blog.csdn.net/qq276592716/article/details/7325250 2. 博文:Linux多线程信号总结 ...
- QRadioButton类中Toggled()信号的使用方法
QRadioButton类中Toggled()信号的使用方法 1.说明 QRadioButton中,Toggled()信号是在Radio Button状态(开.关)切换时发出的,而clicked()信 ...
- 【转贴】gdb中的信号(signal)相关调试技巧
一篇不错的帖子,讲的是gdb中的信号(signal)相关调试技巧 转自Magic C++论坛 http://www.magicunix.com/index_ch.html http://www.m ...
- 在 docker 容器中捕获信号
我们可能都使用过 docker stop 命令来停止正在运行的容器,有时可能会使用 docker kill 命令强行关闭容器或者把某个信号传递给容器中的进程.这些操作的本质都是通过从主机向容器发送信号 ...
- PyQt5中的信号与槽,js 与 Qt 对象之间互相调用
一.PyQt中的信号与槽 信号(Signal)和槽(Slot)是Qt中的核心机制,用在对象之间互相通信.在Qt中每个QObject对象和PyQt中所有继承自QWidget的控件(这些都是QObject ...
- Flask学习【第6篇】:Flask中的信号
实例化补充 instance_path和instance_relative_config是配合来用的.这两个参数是用来找配置文件的,当用app.config.from_pyfile('settings ...
- 关于IP核中中断信号的使用---以zynq系统为例
关于IP核中中断信号的使用---以zynq系统为例 1.使能设备的中断输出信号 2.使能处理器的中断接收信号 3.连接IP核到处理器之间的中断 此处只是硬件的搭建,软件系统的编写需要进一步研究. 搭建 ...
随机推荐
- perl学习(8) 控制:unless,until,next,redo,last
Perl中实现了所有C 的操作符! Perl力求代码最少! 1.1.unless unless的含义是:除非条件为真,否则执行块中的代码,和if正好相反 unless($fred=~ /^[A-Z_] ...
- 【数位DP】 HDU 4722 Good Numbers
原题直通车: HDU 4722 Good Numbers 题意: 求区间[a,b]中各位数和mod 10==0的个数. 代码: #include<iostream> #include& ...
- Javascript 调试利器 Firebug使用详解
Javascript 调试利器 Firebug使用详解 有时候,为了更清楚方便的查看输出信息,我们可能需要将一些调试信息进行分组输出,那么可以使用console.group来对信息进行分组,在组信息输 ...
- Mac 下安装配置Mysql
在Mac 下载 Mysql Server : 参考:http://www.mysql.com/downloads/ 下载Mysql 安装程序 打开下载地址: http://www.mysql.com/ ...
- css3动画与js动画的一些理解
http://zencode.in/19.CSS-vs-JS%E5%8A%A8%E7%94%BB%EF%BC%9A%E8%B0%81%E6%9B%B4%E5%BF%AB%EF%BC%9F.html 首 ...
- phpcms 列表页中,如何调用其下的所有子栏目(或特定的子栏目)?
{pc:get sql="select * from phpcms_category where catid in(你的子栏目ID)" return="data" ...
- 如何在SourceInsight中选中匹配的大括号中的内容
如何在SourceInsight中选中匹配的大括号中的内容 要分析的代码很长,多个for,if等分析嵌套在一起,代码有点乱,找到了这个分支的头,却不知道尾在哪,找到了尾却不知道哪是开头,在网上找了一下 ...
- HDU2795 Billboard 【线段树】+【单点更新】
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- RMAN 备份
backup database; --备份整库 backup database format '\xxxxxx\xxx_%U'; --备份整库到指定路劲 backup tablespace users ...
- Windows 8 动手实验系列教程 实验7:磁贴和通知
动手实验 实验7:磁贴和通知 2012年9月 简介 磁贴是Windows应用商店应用用户体验的重要元素.当应用程序被安装后,它的磁贴将在Windows 8开始屏幕被创建.该磁贴(称为主磁贴)作为启动应 ...