接上节我们来实战操刀一个简单的 PHP 守护程序!
<?php
// 编写一个简单daemon程序
$pid = pcntl_fork();
switch($pid) {
case 0:
// 2.子进程逻辑
$mypid = posix_getpid();
//echo "Son pid is $mypid\n";
// 3.升级组长进程
if (!$sid = posix_setsid()) {
exit("Set sid error\n");
}
// 4.防止组长进程再次控制终端
if (-1 == pcntl_fork()) {
exit("Fork error\n");
}
// 5.标准输入/输出/错误
fclose(STDIN);
fclose(STDOUT);
fclose(STDERR);
// 6.改变目录
chdir("/");
// 7.重设掩码
umask(0);
break;
case -1:
// fork err
exit("Fork error\n");
break;
default:
// 1.父进程逻辑
$mypid = posix_getpid();
//echo "Parent pid is $mypid\n";
exit();
break;
}
for ($i = 0; $i < 10000; $i ++) {
file_put_contents("/tmp/wutao.log", "i=$i\n", FILE_APPEND);
}
sleep(10);
===
如上程序已加注释并加了序号。大家可以参考一下,有啥疑问或问题咱们可以及时交流, 感谢!
下节咱们讲讲进程/线程/多进程的一些相关基础,一起再巩固复习复习!
本作品采用《CC 协议》,转载必须注明作者和本文链接
可以用这个原理来实现一个php版本的守护进程管理工具吗?