Farsh
~ on ~ high ~ wave ~
pcntl и magic numbers
Сидел тут че-то и не вдуплял, что за странности у меня в приложении творятся.
Но порылся и нарыл:
Вывод:
Я процесс с #8503
Рандомное число - 30
Я процесс с #8505
Рандомное число - 30
Я процесс с #8504
Рандомное число - 30
Процесс #8503 завершился
Процесс #8505 завершился
Процесс #8504 завершился
Заметил, что если в родителе использовалась rand/mt_rand и в детях таже самая функция, то числа у них будут одни и теже. Если в родителе использовать mt_rand, а в детях rand, например, то все нормально.
Это шо за херня? Видимо как-то связано с генератором чисел, который потом типо как скопировался к детям
Сидел тут че-то и не вдуплял, что за странности у меня в приложении творятся.
Но порылся и нарыл:
PHP:
rand(1, 100);
function func() {
echo 'Я процесс с #' . getmypid() . "\n";
echo 'Рандомное число - ' . rand(1, 50) . "\n";
return 0;
}
$children = array();
for($i = 0; $i < 3; ++$i) {
if(($pid = pcntl_fork()) === 0) {
exit(func());
} else {
$children[] = $pid;
}
}
foreach($children as $pid) {
$pid = pcntl_wait($status);
echo 'Процесс #' . $pid . ' завершился' . "\n";
}
Я процесс с #8503
Рандомное число - 30
Я процесс с #8505
Рандомное число - 30
Я процесс с #8504
Рандомное число - 30
Процесс #8503 завершился
Процесс #8505 завершился
Процесс #8504 завершился
Заметил, что если в родителе использовалась rand/mt_rand и в детях таже самая функция, то числа у них будут одни и теже. Если в родителе использовать mt_rand, а в детях rand, например, то все нормально.
Это шо за херня? Видимо как-то связано с генератором чисел, который потом типо как скопировался к детям
