私はphpを使用してデーモンプロセスを調査して実行しようとしていましたが、PCNTLを有効にするためにPHPを再コンパイルする必要があることに気付きました。それから私はいくつかのテストを始めました。私は単一の孤立した例をフォークしました:
#!/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);
}
前の例はどちらも同じ結果になりました。私は何かを逃しましたか?案内してもらえますか