接上节我们来实战操刀一个简单的 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 协议》,转载必须注明作者和本文链接
taozywu
讨论数量: 1
tangq

可以用这个原理来实现一个php版本的守护进程管理工具吗?

4年前 评论
taozywu (楼主) 4年前
tangq (作者) 4年前
taozywu (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!