[Cascavel-pm] como apanhar errors de processos filhos iniciados por IPC::Open3 ?

Daniel Ruoso daniel em ruoso.com
Segunda Março 14 13:13:00 PST 2005


Em Seg, 2005-03-14 às 18:01, Alceu R. de Freitas Jr. escreveu:
> O problema é que eu não estou conseguindo fazer o
> processo filho me retornar algo, um sinal, uma
> mensagem, qualquer coisa, quando ele executar algo que
> dê algum problema.

Você diz quando ele morrer?

> "open3() returns the process ID of the child process.
> It doesn't return on failure: it just raises an
> exception matching /^open3:/. However, exec failures
> in the child are not detected. You'll have to trap
> SIGPIPE yourself."

Ele quer dizer que ele não consegue diferenciar um erro de execução do
processo filho de um erro do exec, só isso.

> Ok, então eu tentei criar uma função anônima para
> ligar com SIGPIPE. O problema é que SEMPRE eu recebo
> SIGPIPE... tanto faz se o aplicativo que o processo
> filho executou retornou erro ou não.

O que exatamente você chama de retornar erro? SIGPIPE só quer dizer que
o PIPE foi quebrado.

> Eu tentei usar o esquema "eval { }; die $@ if $@;",
> mas também não funciona.

Eval??? como você usaria eval?

> O mais estranho é que, até aonde entendi, o processo
> filho deveria executar somente o que eu passo para a
> função como parâmetro. Em alguns dos milhares de
> testes que fiz, me parecia que o filho estava
> repetindo comandos que teriocamente deveriam ser
> executados apenas pelo processo pai. Se eu usasse
> open(-|) e exec, eu poderia separar isso usando um
> 
> if ($pid) { # pai
> 
> 
> } else { # filho
> 
> 
> }

Acho que você está fazendo uma graaaaaaaande confusão... o trecho que
você acabou de citar se refere a uma chamada fork() e não exec(), muito
menos open ou open3

> Se quiserem, eu posso postar depois o código que estou
> tentando fazer aqui. Não sei se estou tentando fazer
> pato botar ovo porque estou rodando isso como CGI.

O fato de ser CGI não muda nada...
é interessante você mandar o código, pq eu realmente não entendi qual é
o problema.

daniel



Mais detalhes sobre a lista de discussão Cascavel-pm