A coluna comm
e a primeira palavra da coluna args
na ps
output mostram o nome do programa executável se todos os envolvidos seguirem a convenção padrão. No entanto, é possível ter discrepâncias por vários motivos.
Quando um programa é iniciado, o nome do comando, conforme mostrado na coluna args
, é escolhido pelo programa pai que executa o programa e é passado como um argumento ( argv[0]
). Por convenção, o pai escolhe o nome base do executável (ou seja, o caminho para o executável sem a parte do diretório), mas isso não é imposto. Quando o programa estiver em execução, ele poderá substituir essa sequência.
O Init (pelo menos o Linux SysVinit tradicional) sobrescreve seu argv[0]
para indicar o runlevel atual.
No Linux, a coluna comm
é inicialmente preenchida pelo kernel para os primeiros 16 caracteres do nome base do executável. O processo pode alterar o conteúdo com a prctl
chamada do sistema.
Se o executável for renomeado ou excluído, nem a coluna comm
nem a coluna args
refletirão isso.
ps
não exibe o caminho para o executável, isso não está na descrição do trabalho. lsof
pode te dizer com lsof -a -p 1 -d txt
.
No Linux, você pode ver essas informações em arquivos em /proc/PID/
:
- O nome do processo (
comm
field) em/proc/1/stat
(segundo campo entre parênteses) e/proc/1/status
(Name
field). - O caminho para o executável via
/proc/1/exe
. - Os argumentos (começando com
argv[0]
) em/proc/1/cmdline
(os argumentos são separados por bytes nulos).