信号
信号是一种系统调用。通常我们用的kill命令就是发送某个信号给某个进程的。具体有哪些信号可以在liunx/mac中运行kill -l查看。下面这个例子中,父进程等待5秒钟,向子进程发送sigint信号。子进程捕获信号,调信号处理函数处理。
代码演示<?php
$childlist=[];
$parentid=posix_getpid();
//信号处理函数
functionsignhandler($sign){
$pid=posix_getpid();
exit("process:{$pid},iskilled,signalis{$sign}\n");
}
$pid=pcntl_fork();
if($pid==-1){
//创建子进程失败
exit("forkfail,exit!\n");
}elseif($pid==0){
//子进程执行程序
//注册信号处理函数
declare(ticks=10);
pcntl_signal(sigint,"signhandler");//注册sigint信号处理函数
$pid=posix_getpid();
while(true){
echo"childprocess{$pid},isrunning.......\n";
sleep(1);
}
}else{
$childlist[$pid]=1;
sleep(5);
posix_kill($pid,sigint);//向指定进程发送一个信号
}
//等待子进程结束
while(!empty($childlist)){
$pid=pcntl_wait($status);
if($pid>0){
unset($childlist[$pid]);
}
}
echo"thechildprocessiskilledbyparentprocess{$parentid}\n";运行结果
当父进程没有发送信号的时候,子进程会一直循环输出‘child process is running...’,父进程发送信号后,子进程在检查到有信号进来的时候调用对应的回调函数处理退出了子进程。
declare(ticks = 10)
这里的ticks=10,可以理解为程序执行10条低级语句后,检查看有没有未执行的信号,有的话就去处理。
教你如何建设一个成功的网站网站建设用颜色帮助用户抓重点如何提高网站优化SEO(提升网站优化的5种方法)网站设计中所需要注意的六个点?百度SEO优化的窍门与关键技巧(排名下降分析)网站建设如何写一篇很会“撩”的文章?如何有效提升响应式网站建设的质量怎能么最大化降低网站页面无效收录?