我正在研究并尝试使用php进行守护进程,我发现自己被迫重新编译PHP以启用PCNTL。然后我开始做一些测试。我分叉了一个孤儿的例子:
#!/usr/bin/env php
<?php
$pid = pcntl_fork();
if ($pid === -1) {
echo("Could not fork! \n");die;
} elseif ($pid) {
echo("shell root tree \n");
} else {
echo "Child process \n";
chdir("/");
fclose(STDIN);
fclose(STDOUT);
fclose(STDERR);
$STDIN = fopen('/dev/null.txt', 'r');
$STDOUT = fopen('/dev/null.txt', 'wb');
$STDERR = fopen('/dev/null.txt', 'wb');
posix_setsid();
while(1) {
echo ".";
sleep(1);
}
}
然后我运行了脚本:
$cd /var/www
$./test.php
每件事情都进展顺利,文件/dev/null.txt已清除,并且每1秒钟在无限循环中更新。
然后我想知道PCNTL的好处,所以我改变了代码:
#!/usr/bin/env php
<?php
fclose(STDIN);
fclose(STDOUT);
fclose(STDERR);
$STDIN = fopen('/dev/null.txt', 'r');
$STDOUT = fopen('/dev/null.txt', 'wb');
$STDERR = fopen('/dev/null.txt', 'wb');
while(1) {
echo ".";
sleep(1);
}
之前的两个例子都给了我相同的结果。 我错过了什么吗?你能指导我吗