Como obter linha de comando do processo UNIX?

8

É possível pegar a linha de comando usada para invocar um processo no Mac OS X?

user7656
fonte
11
ps --pid $PID -o args=Isso é o que eu uso, de qualquer maneira ...
Yardena
2
O equivalente Mac desse comando é:ps -p <pid> -o args=
Nate
11
se "-o args =" trunca a saída, você pode tentarps -p <pid> -o command=
Jose Alban

Respostas:

11

ps axmostra a linha de comando de todos os processos em execução; você pode receber o pid que desejar.

Bkkbrad
fonte
@ mark4o Ou simplesmente ps awux | cat, como ps -w não limitará o número de colunas a serem exibidas quando a saída não for stdout, como quando canalizada para outro comando.
jtimberman
11
Por que isso acontece toda semana? "Aviso: sintaxe ruim do ps, talvez um falso '-'? Consulte procps.sf.net/faq.html " e "Observe que" ps -aux "é diferente de" ps aux ". Os padrões POSIX e UNIX exigem que" ps -aux "imprime todos os processos pertencentes a um usuário chamado" x ", bem como imprime todos os processos que seriam selecionados pela opção -a. Se o usuário chamado" x "não existir, esse ps poderá interpretar o comando como "ps aux" e imprima um aviso. Esse comportamento visa ajudar na transição de scripts e hábitos antigos. É frágil, sujeito a alterações e, portanto, não deve ser considerado. "
Hello71
Não sei, olá71. Corrigi minha resposta de dois anos para você.
Bkkbrad 18/08/19
4

Faz:

~$ ps ax | grep "ntp"
   57   ??  Ss     0:04.66 /usr/sbin/ntpd -c /private/etc/ntp.conf -n
 3104 s000  S+     0:00.00 grep ntp

faça o que você precisa (mude o ntp para o programa em que está interessado)? Isso geralmente me fornece os argumentos da linha de comando dos processos em execução (eu uso para verificar o que o Launchd usou ao executar um daemon do sistema, por exemplo).

O Tentáculo
fonte
2

cat /proc/$PROCESSNUMBER/cmdline | tr '\0' '\n'

Embora seja específico do Linux, ele obtém a linha de comando do processo numerada $PROCESSNUMBERdiretamente do kernel (a /proc/$PROCESSNUMBER/cmdlineparte) e a torna legível, colocando cada argumento em uma linha separada, traduzindo (com tr -tokensubstituição) os \ 0's para novas linhas (\ n).

Esta linha só funciona se você colocar um número de processo real de um processo em execução (você pode encontrar um executando o comando ps -ef) na parte $ PROCESSNUMBER!

JdeHaan
fonte
3
O pôster original pediu para o Mac OS X (que não vem da caixa procfs) #
Andre Holzner
2
Ouxargs -0 < /proc/PID/cmdline
Bash