Todos os utilitários obtêm suas informações de /proc/$PID de qualquer maneira, mas há (pelo menos) três lugares em /proc/$PID que contêm o nome do executável de alguma forma, e eles relatam informações diferentes.
- O campo
Nameem/proc/$PID/status(também disponível em um formato mais difícil de analisar em/proc/$PID/stat). Este é o nome do executável, mas truncado para 15 caracteres. Como o kernel executa o truncamento, nenhuma opção parapspode ajudar. Isso é o que mostraps -o comm(ou seu sinônimops -o ucmd). - O link simbólico
/proc/$PID/exenameaponta para o arquivo executável. Você pode obter seu conteúdo comreadlink /proc/$PID/exename. Ao contrário das informações relatadas porps, apenas o usuário que está executando o processo tem permissão para ler o destino do link. - O argumento zeroth para o processo, conforme escolhido pelo shell ou outro programa que o invocou. Por convenção, os shells escolhem o nome do executável conforme você o digitou (com ou sem um caminho completo). Você pode obter todos os argumentos de
pscomps -o cmd(ou seu sinônimops -o command), mas os argumentos são separados por espaços para que você não possa dizer com segurança onde o argumento zeroth para. Você pode ler os argumentos de/proc/cmdline, onde eles são separados por caractere nulo:</proc/$PID/cmdline awk -vRS='extrai o argumento zeroth.Name' '{print; exit;}'
Para completar, deixe-me mencionar que esses nomes podem mudar durante a vida útil do processo, embora a maioria dos programas não o faça:
- O processo pode alterar o campo
/proc/$PID/statusdeprctlchamandoPR_SET_NAMEcom o argumento(deleted). - O arquivo executável pode ser renomeado ou excluído. Em casos simples, o Linux controla o novo nome (mas os casos de borda podem não funcionar, por exemplo, se você criar um link físico para o executável). Se o arquivo for excluído, o kernel adicionará
argv[0]ao destino do link. - O argumento zeroth para o processo é lido na memória do processo (é %code% em C). O processo pode modificá-lo livremente.