我正在研究并尝试使用 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);
}
前面的两个例子都给了我相同的结果。我错过了什么吗?你能指导我吗