Como eu determino o nome do processo de um aplicativo?

13

Esta é a situação:

Trabalhando na próxima versão de um editor do Unity Quick List, gostaria de adicionar uma maneira confiável de "reiniciar" os ícones do iniciador. Para fazer isso, preciso remover o ícone (editando gsettings) e substituí-lo na mesma posição. Até agora não há problema. No entanto, se o aplicativo em questão estiver em execução, o usuário possivelmente perderá dados, pois o aplicativo será encerrado quando o ícone for removido do ativador. O que eu preciso é uma maneira confiável de encontrar o nome do processo de um aplicativo, deixar o editor verificar na lista de processos em execução se o aplicativo estiver em execução e enviar uma mensagem de aviso ao usuário de que o ícone não pode ser reiniciado a aplicação está sendo executada.

O que fiz até agora é fazer o editor examinar o arquivo da área de trabalho, ler o comando, ler o comando, remover a seção do diretório e, além disso, examinar possíveis scripts remotos aos quais o comando de arquivo da área de trabalho pode se referir para strings começando com "./"

Embora o método pareça funcionar bem com todos os aplicativos em que o testei, tenho a sensação de que deve haver uma maneira mais fácil de abordar o problema de uma maneira "tudo em um" ...

Existe?

Também sugestões para capturar situações mais excepcionais são bem-vindas!

    
por Jacob Vlijm 15.12.2012 / 09:36

2 respostas

3

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 ?

    
por Robie Basak 06.01.2013 / 14:17
1

O comando xprop (seguido por alt-tab para a janela do aplicativo relevante e depois clique uma vez na janela) parece fazer o truque para mim.

    
por el_gallo_azul 09.10.2016 / 02:53