読者です 読者をやめる 読者になる 読者になる

fork()した子プロセスが同じrand()を返す

<?php
for ($i = 0; $i < 5; $i++) {
    if (pcntl_fork() == 0) {
        echo rand(0, 100), "\n";
        exit;
    }
}

これはばらばらの値を返すけど、

<?php
echo rand(0, 100), "\n";
for ($i = 0; $i < 5; $i++) {
    if (pcntl_fork() == 0) {
        echo rand(0, 100), "\n";
        exit;
    }
}

と、親プロセス側で先に一度rand()が呼ばれていると、子プロセスが出力するrand()はすべて同じになってしまう。rand()は最初に呼ばれた時に自動的にsrand()されるので、同じseedが使われているということか。