1

私は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);
}

前の例はどちらも同じ結果になりました。私は何かを逃しましたか?案内してもらえますか

4

1 に答える 1