daemon例子
<无详细内容>
<?php
declare(ticks = 1); //类似一个计时器,在这里配合SIGALRM使用,产生时间。
$init_mds = md5_file('config.php');
//注册信号处理函数
pcntl_signal( SIGALRM, "signal_handler", true);
pcntl_signal( SIGHUP, "signal_handler", TRUE);
$job_flag = FALSE;
$signal_flag = FALSE;
while(1){
$job_flag = FALSE;
print "worker start running... \n";
sleep(5);
print "worker's task done... \n";
$flag = TRUE;
//创建子进程,同事退出当前进程
AutoStart( $signal_flag );
}
function signal_handler( $signal ){
global $job_flag; //声明全局 一下使用该变量值
global $signal_flag;
switch( $signal ){
case SIGQUIT:
print date('y-m-d H:i:s', time() ). "Caugth signal: SIGQUIT - No : $signal \n";
exit(0);
break;
case SIGSTOP:
print date('y-m-d H:i:s', time() ). "Caugth signal: SIGSTOP - No : $signal \n";
exit(0);
break;
case SIGHUP:
print date('y-m-d H:i:s', time() ). "Caugth signal: SIGHUP - No : $signal \n";
if( $flag == TRUE){
AutoSatrt(TRUE);
}else{
$signal_flag = TRUE;
}
break;
case SIGALRM:
print date('y-m-d H:i:s', time() ). "Caugth signal: SIGHUP - No : $signal \n";
pcntl_alarm( 5 );
break;
default:
break;
}
}
function AutoStart($signal = FALSE, $filename = 'config.php'){
global $init_md5;
//文件被改变情况下fork子进程,父进程退出,子进程重新做MD5散列
if($signal || md5_file($filename) != $init_md5){
//创建进程
$pid = pcntl_fork();
if($pid == -1){
print "Fork error \n";
}else if( $pid > 0){
print "Parent exit \n";
exit(0);
}else{
$init_md5 = md5_file($filename);
print "Child continue to run \n";
}
}
}
?>
- 上一篇:一个简单的php Calender(日历)
- 下一篇:declare测试
精彩图集
精彩文章






