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测试
精彩图集
精彩文章