como obter o nome do arquivo de processo do PID no MacOS?


13

É possível obter o nome do arquivo de um processo usando o PID? O ps exibe muitas informações úteis sobre um processo, mas não uma dica sobre o local do arquivo executável do processo.

Respostas:


13

Uma maneira de obter a localização binária do processo é usar lsofe greppara o primeiro txtsegmento. Por exemplo, no shell para ver o que é binário, use o PID do shell no lugar de $$.

$ lsof -p $$ | grep txt
bash    78228 blair  txt    REG   14,2   1244928   6568359 /bin/bash
bash    78228 blair  txt    REG   14,2   1059792  23699809 /usr/lib/dyld
bash    78228 blair  txt    REG   14,2 136368128  81751398 /private/var/db/dyld/dyld_shared_cache_i386

Você pode ver que o shell está usando /bin/bash.

Essa técnica funciona se o processo foi iniciado usando um caminho absoluto ou relativo. Por exemplo, entrar em um shell e executar

$ sleep 1234567

e usar psem outro shell mostra apenas como foi lançado:

$ ps auxww|grep '[s]leep'
blair    79462   0.0  0.0   600908    744 s011  S+   11:17PM   0:00.00 sleep 1234567

usando lsofshows que binário foi executado:

$ lsof -p 79462 | awk '$4 == "txt" { print $9 }'
/opt/local-development/bin/gsleep

Eu tenho o MacPorts coreutils + with_default_names instalado, o que explica que eu peguei gsleepe não /bin/sleep.


A tubulação da saída do awk funciona muito bem, com uma pequena adição. Eu adicionei ; exitapós a declaração de impressão para que apenas a primeira txtentrada seja impressa, mesmo que haja várias, como no exemplo do bash.
Qqx

2

Exemplo: você está atrás do nome do comando do processo associado para PID 45109...

>    % ps awx | awk '$1 == 45109 { print $5 }'
>    /Applications/Safari.app/Contents/MacOS/Safari

2
Não mostrará o caminho binário completo se o binário tiver sido iniciado apenas pelo nome, sem especificar o caminho.
grigoryvp

não funciona bem, se o caminho contém espaços em branco
Peter Lapisu


1

ps -ef com grep funciona para mim. Para um nome de arquivo específico, basta passar pelo grep assim:

MacBook:~ Me$ ps -ef | grep Safari | grep -v grep
  501 15733   301   0   0:25.76 ??         1:58.24 /Applications/Safari.app/Contents/MacOS/Safari -psn_0_4977855

(O final 'grep -v grep' simplesmente impede que você obtenha seu próprio comando grep na saída)


1

ps -p <pid> -Ocommand

L1A1:~ a1155344$ ps -p1 -Ocommand
  PID   TT  STAT      TIME COMMAND
    1   ??  Ss     0:02.26 /sbin/launchd
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.