废话不多说,直接上代码,这是一个没有整合的面向过程的代码,希望大神看了不要嫌弃
<?php
set_time_limit(0);
$debug = true;
$deamon = true;
$file = '/share/leo/deamon.pid';
$log = '/share/leo/deamon.log';
$params= getopt('s:n:h:');
if(empty($params)){
die("\n-s [stop|start]\n-n [process number]\n-h (help)\n\n");
}
if(isset($params['s']) && $params['s'] == 'stop'){
echo "开始关闭进程\n";
$pid = file_get_contents($file);
$pid_arr = explode(',',$pid);
foreach($pid_arr as $pid){
if(empty($pid)){
continue;
}
posix_kill($pid,9) or die("关闭pid失败!\n");
}
fopen($file,'a+');
unlink($file) or die("关闭进程失败!\n");
die("进程关闭\n");
}elseif(isset($params['s']) && $params['s'] == 'start'){
//判断有没有n
$fork_number = 1;
if(isset($params['n']) && intval($params['n'])>0){
$fork_number = $params['n'];
}
if(file_exists($file)){
die("进程已经存在了\n");
}
}else{
die("\n-s [stop|start]\n-n [process number]\n-h (help)\n\n");
}
if($deamon == true){
$main_pid = posix_getpid();
$count = 1;
while(true){
$pid = pcntl_fork();
if($pid && ++$count > $fork_number){
//file_put_contents('/share/leo/bug.bm',$main_pid.'-'.posix_getpid()."\n",FILE_APPEND);
posix_kill($main_pid,SIGKILL) or die("\n主进程退出失败\n\n");
exit(0);
}
//父进程和子进程都会执行下面代码
if ($pid == -1) {
//错误处理:创建子进程失败时返回-1.
die("could not fork\n");
}
if($pid == 0){
file_put_contents($file,posix_getpid().",",FILE_APPEND);
do{
$str = date('Y-m-d H:i:s')."==".posix_getpid()."\n";
file_put_contents($log,$str,FILE_APPEND);
}while(true);
exit(0);
}
}
}