여러 프로세스에서 for 루프를 실행하려고하는데 각 for 루프가 부모 프로세스의 배열에 쓸 필요가 있습니다. 배열을 사용하여 하위 프로세스를 종료하려고 시도했지만 pcntl_wexitstatus()
은 정수만 반환 할 수 있습니다. 그래서 나는 붙어있다.자식 프로세스가 부모 프로세스에 값을 반환하는 방법
저는 멀티 프로세싱에 매우 익숙합니다. 그러나 부모와 자식간에 변수를 공유하는 좋은 해결책은 shmop
이지만 실제로 활용하는 방법을 모르겠다는 것을 알게되었습니다.
$output = array();
for ($i = 0; $i < 4; $i++) {
$pid = pcntl_fork();
$start = ($i == 0) ? 1 : (1000000 * $i) + 1;
$end = 1000000 * ($i + 1);
if (!$pid) {
for ($run = $start; $run <= $end; $run++) {
$output[$i][] = 'Run ' . $run;
}
exit($i);
}
}
while (pcntl_waitpid(0, $status) != -1) {
$status = pcntl_wexitstatus($status);
}
echo implode("\n", $output);
그냥 내가는
$output
배열도 백만 항목을 각각 배열 네 개의 항목을 포함해야 일이 기대하는 것을 명확히하기 :
여기 내 코드입니다. 그것은 다음과 같아야합니다 :
Array
(
[0] => Array
(
[0] => Run 1
[1] => Run 2
[2] => Run 3
...
)
[1] => Array
(
[0] => Run 1000001
[1] => Run 1000002
[2] => Run 1000003
...
)
[2] => Array
(
[0] => Run 2000001
[1] => Run 2000002
[2] => Run 2000003
...
)
[3] => Array
(
[0] => Run 3000001
[1] => Run 3000002
[2] => Run 3000003
...
)
)
당신이 뭘하려고 어떻게 당신이 그것을 달성하기 위해 노력하고있는 무슨에 초점을 맞출 것입니다. 개인적으로는 실행 단위간에 데이터를 공유해야하므로 프로세스가 아닌 스레드가 필요합니다. 프로세스간에 데이터를 "공유"하는 또 다른 형태는 각 프로세스가 종료되기 전에 작성하는 중앙 데이터베이스입니다. 부모가 포착 한 신호는 그러한 데이터베이스에서 읽게됩니다. 가장 빠른 솔루션은 아니지만 작동합니다. 그러나 http://www.php.net/pthreads를 살펴보십시오. –