Rastreia [sh] defunto para fins de depuração?

2

Eu tenho uma grande aplicação (em C ++), que gera de vez em quando processo extinto. Eu sei que a aplicação usa intensivamente os comandos do Linux dentro. Eu precisaria saber quais comandos do linux eram chamados por aqueles processos sh extintos, é possível descobrir? Ou, é possível configurar o Linux e obter um tipo de log quando meu aplicativo chama comandos do Linux?

Obrigado.
Luke

    
por user3919 18.01.2011 / 13:04

2 respostas

3

De Wikipedia :

A defunct process is a process that has completed execution but still has an entry in the process table. This entry is still needed to allow the process that started the (now zombie) process to read its exit status.

Seu código C ++ está chamando wait() ? Se você obtiver o status de saída chamando wait() , o processo defunto deverá desaparecer.

    
por 18.01.2011 / 13:29
2

Esta grande aplicação está emitindo comandos externos através de um shell, usando popen ou funções de biblioteca similares. Os shells intermediários permanecem como zumbis ("processos defuntos") porque o aplicativo não está chamando wait para “ ceifar ”seus filhos. Note que os processos zumbis são totalmente inofensivos (não importa o que os filmes B possam levar você a acreditar); o único recurso que eles consomem é uma entrada na tabela de processos.

Você pode rastrear quais comandos o aplicativo executa executando

strace -f -s99999 -v -eexecve -o big-application.strace ./big-application

Isso pode desacelerar seu programa um pouco. Você pode ativar e desativar o rastreamento durante a vida útil de um processo: para iniciar o rastreamento, executar

strace -f -s99999 -v -eexecve -o big-application.strace -p 12345

em que 12345 é o ID do processo que você deseja rastrear. Mate o processo strace (por exemplo, pressionando Ctrl + C ) para interromper o rastreamento.

    
por 18.01.2011 / 23:22

Tags