php pcntl wait,关于pcntl_wait与信号中断触发的问题

探讨Workerman中发送SIGINT信号如何影响主进程的接收行为,作者模拟实验发现主进程在接收到信号时并未立即执行处理函数,而是阻塞。文章解析Workerman内部处理方式,揭示了控制+C中断时信号处理函数执行的条件。
摘要由CSDN通过智能技术生成

请教一下,在workerman发送信号SIGINT给主进程,主进程(pcntl_wait)会立刻收到信号并执行信号处理函数,

我模拟了下,主进程(pcntl_wait)会一直阻塞,并不会立刻执行信号处理函数,信号已经注册入队列当中了。假设我发送了好几次信号,最终如果按control+c中断的时候,就会输出这几次信号的处理函数。

首先感谢BOSS:),希望知道workerman是如何处理的,我看了好多次,还是找不出所以然-。-,太笨了。

代码如下

function stopAll($sig){

echo "master has a sig $sig\n" ;

global $pid ;

echo $pid."\n" ;

if($pid > 0) {

posix_kill($pid,$sig) ;

}

}

$pid = pcntl_fork();

if($pid > 0)

{

pcntl_signal(SIGINT,'stopAll') ;

$epid = pcntl_wait($status,WUNTRACED);

$id = getmypid();

echo "parent process {$id}, child process {$pid}\n";

if($epid){

echo "child $epid exit \n" ;

}

pcntl_signal_dispatch();

}

else

{

$id = getmypid();

echo "child process,pid {$id}\n";

while(1){

sleep(2) ;

}

}

我发送了好几次信号,仍然阻塞,最后以control+c中断输出如下:

qmoredeMacBook-Pro:120.25.105.202 Qmore$ php recive_sig.php

child process,pid 24793

^[[A^Cmaster has a sig 2

24793

master has a sig 2

24793

master has a sig 2

24793

master has a sig 2

24793

master has a sig 2

24793

parent process 24792, child process 24793

child 24793 exit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值