/*
* php 进程管理
*/
fclose(STDIN);
fclose(STDOUT);
fclose(STDERR);
$STDIN = fopen('/dev/null', 'r');
$STDOUT = fopen('application.log', 'ab');
$STDERR = fopen('error.log', 'ab');
echo '父进程:'.posix_getpid()."\r\n";
$pid = pcntl_fork();
//父进程和子进程都会执行下面代码
echo '创建了子进程:'.$pid . "\r\n";
if ($pid == -1) {
//错误处理:创建子进程失败时返回-1.
die('could not fork');
} else if ($pid > 0) {
//父进程会得到子进程号,所以这里是父进程执行的逻辑
//pcntl_wait($status); //等待子进程中断,防止子进程成为僵尸进程。
echo '结束父进程'."\r\n";
exit(0);
}
//子进程得到的$pid为0, 所以这里是子进程执行的逻辑。
$sid = posix_setsid(); //Make the current process a session leader
if($sid < 0){
//-1 创建失败
exit(1);
}
while(true){
sleep(1);
echo '守护进程在运行,时间:'.date('Y-m-d H:i:s')."\r\n";
}
网友评论