Processo PHP fork – obtenção de saída infantil no pai

Eu quero alcançar o seguinte:

Inicialize uma matriz. O processo filho adiciona alguns elementos à matriz. O processo pai adiciona alguns elementos à matriz. Finalmente, antes de sair, imprima todos os elementos.

A seguir está o código que escrevi:

 

No entanto, ele imprime apenas um valor – Put by parent . Alguém pode explicar o comportamento e sugerir o código certo?

Saudações, JP

   

As crianças com bifurcação ganharão sua própria cópia dedicada de seu espaço de memory assim que escrevessem em qualquer lugar – isto é “cópia em gravação”. Enquanto o shmop fornece access a um local de memory comum, as variables ​​de PHP reais e o que não está definido no script NÃO são compartilhados entre as crianças.

Fazendo $ x = 7; em uma criança não vai fazer o $ x nas outras crianças também se tornarem 7. Cada criança terá seu próprio $ x dedicado que é completamente independente da cópia de todos os outros.

um socket de domínio local é mais fácil. tenha o pai abrir um com fsockopen para cada criança imediatamente antes do garfo. assim você pode ter um canal de comunicação por criança: http://php.net/manual/en/transports.unix.php e http://php.net/manual/en/transports.unix.php .

Você também pode compartilhar memory ou abrir um canal de comunicação bidirecional entre os dois processos e criar um pouco de api para enviar dados de um lado para o outro.

Enquanto o pai e os filhos sabem que a chave / chaves do segmento de memory compartilhada está ok para fazer um shmop_open antes do pcnlt_fork. Mas lembre-se de que o pcnlt_fork retorna 0 no processo da criança e -1 na falha ao criar a criança (verifique seu código perto do comentário / confusão /). O pai terá em $ pid o PID do processo filho que acabou de ser criado.

Verifique aqui:

http://php.net/manual/es/function.pcntl-fork.php

(desculpe pelo cruzamento)

Eu sugiro um olhar para socket_create_pair () .

No manual do PHP é um exemplo muito curto e fácil de comunicação interprocesso (IPC) entre um garfo () – pai e filho.

E usando serialize () und unserialize () Você pode até mesmo transferir tipos de dados complexos como arrays …

O código da criança está faltando a instrução print_r() .

O pai não imprimirá o que a criança adicionou aos values , pois a adição foi feita após o processo filho ter sido fork() ed off, e com isso obteve sua própria cópia da memory do prcoess.

Do trecho da fork -tag (ênfase por mim):

A function fork() é a maneira Unix / Linux / POSIX de criar um novo processo, duplicando o processo de chamada.

Esse comportamento de bifurcação é diferente do encadeamento onde todos os segmentos compartilham o mesmo espaço de endereço.