Não há como resolver isso no caso geral. Seja qual for o mecanismo que você venha a propor, acredito que sempre será possível escrever um processo que irá iludir você, a menos que você modifique a maneira como os processos são iniciados, a fim de rastreá-los dessa maneira.
O Upstart precisa lidar exatamente com o mesmo problema para rastrear se os daemons ainda estão em execução, e os autores de trabalhos iniciantes precisam especificar detalhes (o número de forquilhas) para iniciantes a serem rastreados. Dado que o upstart não pode gerenciá-lo sem ajuda, eu não acho que você pode, também. E o upstart está mesmo no controle da maneira como os processos são lançados, o que eu acho que você não está aqui.
Eu acho que o melhor que você pode fazer é o que você já está fazendo. Observar /proc/<pid>/stat
e /proc/<pid>/cmdline
é uma maneira razoavelmente geral, mas ainda assim não pegará todos os casos. O comando pgrep
envolve isso. Se você ainda não estiver usando pgrep
, dê uma olhada no pgrep manpage para opções de coisas que você pode combinar contra.
Tendo dito tudo isso, não estou convencido de que você realmente precise fazer isso em primeiro lugar. Se você não pode acompanhar o processo, não vejo como o Unity também pode fazer isso. Uma abordagem melhor não seria eliminar as falhas do aplicativo? Eu procuraria detalhes de por que seus aplicativos estão falhando (certamente isso é um bug em algum lugar?), Ao invés de tentar contornar isso como você descreveu. Gostaria de saber se isso afeta somente os aplicativos que reconhecem o Unity, que estão chamando o Unity para funcionalidade extra via DBus ?