Monitoramento de crianças enfocadas usando PHP

Eu tenho um problema, eu uso pcntl_fork para abrir um processo em PHP,

$pid = pcntl_fork(); if ($pid == -1) { die('could not fork'); } else if ($pid) { // we are the parent pcntl_wait($status); //Protect against Zombie children } else { pcntl_exec("/path/to/php/script"); echo "Could not Execute..."; } 

Estou tentando descobrir uma maneira de monitorar o status do script PHP executado como o Menino no garfo original. Existe alguma maneira de saber se a criança ainda está em execução ou se houve algum erro fatal levantado durante a execução do script filho e pegar todas as mensagens da criança para o processo pai usando;

 pcntl_signal(SIGUSR1, "signal_handler"); 

Obrigado e saudações
Arun Shanker Prasad.

Você pode definitivamente monitorar o processo filho:

 $pid = pcntl_fork(); if ($pid == -1) { die('could not fork'); } else if ($pid) { // we are the parent pcntl_waitpid($pid, $status, WUNTRACED); //Protect against Zombie children if (pcntl_wifexited($status)) { echo "Child exited normally"; } else if (pcntl_wifstopped($status)) { echo "Signal: ", pcntl_wstopsig($status), " caused this child to stop."; } else if (pcntl_wifsignaled($status)) { echo "Signal: ",pcntl_wtermsig($status)," caused this child to exit with return code: ", pcntl_wexitstatus($status); } } else { pcntl_exec("/path/to/php/script"); echo "Could not Execute..."; } 
  • pcntl_wifexited () – Verifica se o código de status representa uma saída normal
  • pcntl_wifstopped () – Verifica se o processo filho está parado no momento
  • pcntl_wifsignaled () – Verifica se o código de status representa um término devido a um sinal
  • pcntl_wexitstatus () – Retorna o código de retorno de uma criança encerrada
  • pcntl_wtermsig () – Retorna o sinal que fez com que a criança terminasse
  • pcntl_wstopsig () – Retorna o sinal que fez com que a criança pare

EDITAR:

Para esclarecer sobre mensagens entre o processo principal e filho; Você definitivamente não pode capturar Exceções em todos os processos. No que diz respeito a mensagens, usando apenas a biblioteca PCNTL, você também está limitado a processar sinais e códigos de saída.

Não sabendo o que, exatamente, você está fazendo. Você tem uma variedade de outras opções. Gostaria de sugerir uma das seguintes soluções de mensagens assíncronas, pois poderiam abranger suas necessidades.

Baseado em arquivo

Seus processos filho poderiam escrever mensagens para um arquivo, que seria pesquisado pelo pai.

Baseado em Memcache

O mesmo que acima, mas usando o memcached como meio de comunicação.

Baseada em database

O mesmo que acima, mas usando uma tabela db como o meio de comunicação.

Biblioteca de semaforo / IPC do PHP

http://us3.php.net/manual/en/book.sem.php

Isso permite que você use methods como msg_send () e msg_receive () para se comunicar entre os processos.

Estou confiante de que um desses irá fornecer a solução que você está procurando. Indo nos detalhes de como usar qualquer um desses methods, provavelmente está além do escopo desta questão, porém não hesite em fazer uma nova pergunta se precisar de ajuda com o método que você escolher para utilizar.