Lista de processos Java


113

Como posso listar todos os processos Java no bash? Eu preciso de uma linha de comando. Eu sei que existe um comando, psmas não sei quais parâmetros preciso usar.


1
por favor, esforce-se um pouco mais em pesquisar isso e descrever seu problema, há muitas possibilidades, dependendo do que exatamente você está procurando.
Mat

3
Se você sabe que há ps, em seguida, tente primeiro man ps, info pse aprender sobre ele na Internet.
ssapkota

Respostas:


148

experimentar:

ps aux | grep java

e veja como você se sai


109

Java recente vem com a ferramenta Java Virtual Machine Process Status "jps"

http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jps.html

Por exemplo,

[nsushkin@fulton support]$ jps -m
2120 Main --userdir /home/nsushkin/.netbeans/7.0 --branding nb
26546 charles.jar
17600 Jps -m

2
Apenas uma observação: o jps só é fornecido com o JDK, não com o JRE. Máquinas com tempos de execução Java simples não terão essa ferramenta.
aguazales de

como posso obter apenas a contagem de execução do processo java?
Jet

50
jps -lV

é muito útil. Imprime apenas pid e nome de classe principal qualificado:

2472 com.intellij.idea.Main
11111 sun.tools.jps.Jps
9030 play.server.Server
2752 org.jetbrains.idea.maven.server.RemoteMavenServer

31

Você também pode usar o comando pgrep único (não requer o uso de tubos e comandos múltiplos):

pgrep -fl java

27

A partir do Java 7 , a maneira mais simples e menos sujeita a erros é simplesmente usar o comando jcmd que faz parte do JDK forma que funcione da mesma maneira em todos os sistemas operacionais.

Exemplo:

> jcmd
5485 sun.tools.jcmd.JCmd
2125 MyProgram

jcmd permite enviar solicitações de comando de diagnóstico para uma Java Virtual Machine (JVM) em execução.

Mais detalhes sobre como usarjcmd .

Veja também o jcmdUtilitário


1
Uau, isso é ainda melhor do quejps
Sridhar Sarnobat

15

Para um melhor formato de saída, verifique este comando:

ps -fC java

Boa saída limpa; Exatamente o que eu estava procurando. Obrigado!
Charles Naccio

12

Isso retornará todos os processos Java em execução no ambiente linux. Em seguida, você pode encerrar o processo usando o ID do processo.

ps -e|grep java


6

Se eu quiser simplesmente listar os processos java, use:

ps -A | grep java

5
pgrep -l java
ps -ef | grep java

5
Obrigado por este trecho de código, que pode fornecer alguma ajuda imediata. Uma explicação adequada melhoraria muito seu valor educacional, mostrando por que essa é uma boa solução para o problema, e a tornaria mais útil para futuros leitores com perguntas semelhantes, mas não idênticas. Por favor edite sua resposta para adicionar explicação, e dar uma indicação do que limitações e premissas se aplicam. Em particular, por que o segundo deles não mostra o grepprocesso?
Toby Speight

4
ps axuwww | grep java | grep -v grep

O acima vai

  • mostrar todos os processos com linhas longas (arg: www)
  • filtrar (grep) apenas linhas que contenham a palavra java, e
  • filtre a linha "grep java" :)

(aliás, este exemplo não é eficaz, mas é simples de lembrar);)

você pode canalizar o acima para outros comandos, por exemplo:

ps axuwww | grep java | grep -v grep | sed '.....'  | while read something
do
    something_another $something
done

etc ...


3

Quando quero saber se uma determinada classe Java está sendo executada, uso a seguinte linha de comando:

ps ww -f -C java | grep "fully.qualified.name.of.class"

Na visão lateral do SO, o nome do comando do processo é "java". A opção "ww" alarga o máximo de caracteres da coluna, então é possível fazer um grep do FQN da classe relacionada.


Isso é o que eu estava procurando - $ topapenas fornece "java" como o comando, o que não é muito útil ao tentar descobrir qual processo está monopolizando a CPU. $ ps ww -fC javafornece as peças que faltam do quebra-cabeça.
David Clarke

2

jps e jcmd não estavam mostrando nenhum resultado quando tentei usando o openjdk-1.8 no redhat linux. Mas mesmo que isso acontecesse, ele só mostra processos sob o usuário atual, o que não funciona no meu caso. Usar o ps | grep é o que acabei fazendo, mas o caminho da classe para alguns aplicativos java pode ser extremamente longo, o que torna os resultados ilegíveis, então usei o sed para removê-lo. Isso ainda é um pouco grosseiro, mas remove tudo, exceto: PID, User, java-class / jar, args.

ps -o pid,user,cmd -C java | sed -e 's/\([0-9]\+ *[^ ]*\) *[^ ]* *\([^$]*\)/\1 \2/' -e 's/-c[^ ]* [^ ]* \|-[^ ]* //g'

Os resultados são semelhantes a:

  PID USER     CMD
11251 userb org.apache.zookeeper.server.quorum.QuorumPeerMain ../config/zookeeper.properties
19574 userb com.intellij.idea.Main
28807 root org.apache.nifi.bootstrap.RunNiFi run
28829 root org.apache.nifi.NiFi

Uma alternativa no Windows para listar todos os processos é:

WMIC path win32_process where "Caption='java.exe'" get ProcessId,Commandline

Mas isso vai precisar de alguma análise para torná-lo mais legível.


1

Existem muitas maneiras de fazer isso. Você pode usar java.lang.ProcessBuildere "pgrep" para obter o ID do processo (PID) com algo como: pgrep -fl java | awk {'print $1'}. Ou, se você estiver executando no Linux, você pode consultar o/proc diretório.

Eu sei, isso parece horrível e não portátil, e até mal implementado, eu concordo. Mas como o Java realmente roda em uma VM, por alguma razão absurda que não consigo entender depois de mais de 15 anos trabalhando no JDK, é por isso que não é possível ver as coisas fora do espaço da JVM, é realmente ridículo para você pense nisso. Você pode fazer tudo, mesmo forke joinprocessos filhos (aqueles eram uma maneira horrível de multitarefa quando o mundo não sabia sobre tópicos ou pthreads , o que é um inferno! O que está acontecendo em com Java ?! :).

Isso vai dar uma grande discussão, eu sei, mas de qualquer forma, há uma API muito boa que eu já usei em meus projetos e é estável o suficiente ( é OSS, então você ainda precisa testar cada versão que usar antes de realmente confiar na API ): https : //github.com/jezhumble/javasysmon

JavaDoc: http://jezhumble.github.io/javasysmon/ , procure a classe com.jezhumble.javasysmon.OsProcess, ela fará o truque. Espero que tenha ajudado, boa sorte.


1
 ps -eaf | grep [j]ava

É melhor porque só vai mostrar os processos ativos sem incluir este comando que também tem uma string java que []faz o truque


deve ser ps -eaf | grep Java não [j] ava
vaquar khan

@vaquarkhan cara, tente executar as minhas sugestões e as minhas e veja qual é a diferença, ambas funcionarão
Ilya Gazman

Ambos dão os mesmos resultados, entretanto [j] ava é confuso
vaquar khan

0

Eu uso isso (bom no Debian 8): alias psj='ps --no-headers -ww -C java -o pid,user,start_time,command'


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.