关于usleep在posix_kill的应用原理

neconano

在查询status命令中,

            // 发信号SIGUSR2查询状态(主进程通知所有子进程)
            posix_kill($master_pid, SIGUSR2);
            usleep(500000);// 等待0.5秒

为什么要使用usleep,我试了使用pcntl_signal_dispatch(); 不好用,

求教!!!!

2844 6 0
6个回答

walkor

1、status脚本给主进程发送信号
2、主进程会将信号分发给所有子进程
3、子进程收到信号后将自己进程内的统计数据写到磁盘的一个文件里
4、status脚本读取这个文件得到所有进程的统计数据

因为2 3 信号分发接受处理些磁盘 步骤需要一点时间,
所以status脚本那里要sleep下等待这些操作完成

  • 暂无评论
neconano

好的,thx

  • 暂无评论
neconano

请问

posix_kill($master_pid, SIGUSR2);

后没有调用

pcntl_signal_dispatch();

还能生效,是因为

monitorWorkers()吧?

posix_kill 发送信号必须要调用 pcntl_signal_dispatch 才能执行是吗

  • 暂无评论
walkor

调用pcntl_signal_dispatch能执行
另外利用declare(ticks=1);也可以

  • 暂无评论
neconano

好的,那我的理解处理过程是否有问题

  • 暂无评论
walkor

monitorWorkers() 里调用了 pcntl_signal_dispatch

  • 暂无评论
年代过于久远,无法发表回答
🔝