Se eu tiver o número PID de um processo (em uma máquina UNIX), como posso descobrir o nome do processo associado?
O que eu tenho que fazer?
ps -fp PID
mostrará o comando completo
Se eu tiver o número PID de um processo (em uma máquina UNIX), como posso descobrir o nome do processo associado?
O que eu tenho que fazer?
ps -fp PID
mostrará o comando completo
Respostas:
Em todos os sistemas compatíveis com POSIX e com Linux, você pode usar ps
:
ps -p 1337 -o comm=
Aqui, o processo é selecionado pelo seu PID com -p
. A -o
opção especifica o formato de saída, comm
significando o nome do comando.
Veja também: ps
- O Open Group Base Specifications Issue 6
command
corrige.
$ ps -p 1 -o comm=
init $ ps -p 1 -o command=
/ sbin / init; o que significa que não tem cerca de 15 caracteres, talvez apenas o nome do binário x seu caminho completo.
comm
dá do binário nome e command
retorna argumento 0
Você pode encontrar o nome do processo ou o comando usado pelo ID do processo ou pid em
/proc/pid/cmdline
fazendo
cat /proc/pid/cmdline
Aqui pid é o pid para o qual você deseja encontrar o nome
Por exemplo:
# ps aux
................
................
user 2480 0.0 1.2 119100 12728 pts/0 Sl 22:42 0:01 gnome-terminal
................
................
Para encontrar o nome do processo usado pelo pid 2480, você pode usar
# cat /proc/2480/cmdline
gnome-terminal
Para obter o caminho do programa usando um certo pid, você pode usar:
ps ax|egrep "^ [PID]"
Como alternativa, você pode usar:
ps -a [PID]
ps -a
listar todos os processos associados ao terminal, ele não recebe nenhuma entrada.
ps
versão, procps version 3.2.7
funciona bem.
# ls -la /proc/ID_GOES_HERE/exe
Exemplo:
# ls -la /proc/1374/exe
lrwxrwxrwx 1 chmm chmm 0 Mai 5 20:46 /proc/1374/exe -> /usr/bin/telegram-desktop
readlink /proc/1337/exe
. readlink - imprima links simbólicos resolvidos ou nomes de arquivos canônicos.
Você pode usar o pmap. Estou procurando pelo PID 6649. E cortando os detalhes extras do processo.
$ pmap 6649 | head -1
6649: /usr/lib64/firefox/firefox
ps
comando tudo o que você verá é justo java
, mas o restante dos parâmetros passados será exibido totalmente pmap
.
Você também pode usar o awk em combinação com o ps
ps aux | awk '$2 == PID number for a process { print $0 }'
exemplo:
root@cprogrammer:~# ps aux | awk '$2 == 1 { print $0 }'
root 1 0.0 0.2 24476 2436 ? Ss 15:38 0:01 /sbin/init
para imprimir HEAD LINE você pode usar
ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'
(or)
ps --headers aux |head -n 1; ps aux | awk '$2 == 1 { print $0 }'
root@cprogrammer:~# ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 24476 2436 ? Ss 15:38 0:01 /sbin/init
ps ax | grep 1
e veja se realmente retorna o init
processo, por exemplo. (No meu caso, ele retorna 119 linhas-não é desejável.)
ps aux | awk 'NR==1 || $2==PID'
- e não precisamos dizer {print $0}
porque é o padrão. Mas como você comentou, -p
é melhor de qualquer maneira.
Semelhante à resposta do slhck , mas contando com operações de arquivo em vez de invocações de comando:
MYPID=1
cat "/proc/$MYPID/comm"
cat /proc/1/comm
=> init, não / sbin / init. Sua resposta inclui a versão mais longa. Mas +1 de qualquer maneira.
Surpreendentemente, ninguém mencionou a opção -f (comando completo) para o ps. Eu gosto de usá-lo com -e (tudo) e canalizar os resultados para grep, para que eu possa restringir minha pesquisa.
ps -ef | grep <PID>
Isso também é muito útil para analisar os comandos completos que alguém está executando e que consome muitos recursos em seu sistema. Isso mostrará as opções e argumentos passados para o comando.
-e -f
disponível, grep
pode produzir muitas correspondências falsas, por exemplo, grep 33
inclui pid = 933 ou 339, ppid = 33 ou 933 ou 339, tempo usado de 33 segundos ou 33 minutos, ou nome do programa ou argumento contendo 33 - incluindo o grep
próprio. Todos (AFAIK) ps
têm -p
, então apenas ps -fp 33
.
Eu acho o método mais fácil de estar com o seguinte comando:
ps -awxs | grep pid
ps -p${pid}
, isso captará muitos falsos positivos - incluindo o grep
próprio.
fez um script simples para encontrar PID e usar em scripts bash ...
use com cuidado !!
Captura de tela: http://pastebin.com/Cm9YH67U
André
ps
ouls -l /proc/$PID/exe