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.

Jacek Koralik
fonte
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

Rico
fonte
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
Nicholas Sushkin
fonte
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
tinned_sardine
fonte
31

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

pgrep -fl java
anubhava
fonte
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

Nicolas Filotto
fonte
1
Uau, isso é ainda melhor do quejps
Sridhar Sarnobat
15

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

ps -fC java
Marcel Bernic
fonte
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
Jude Niroshan
fonte
10

ps aux | grep java

ou

$ ps -fea|grep -i java

Shivendra Prakash Shukla
fonte
6

Se eu quiser simplesmente listar os processos java, use:

ps -A | grep java
krzysiek.ste
fonte
5
pgrep -l java
ps -ef | grep java
vaquar khan
fonte
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 ...

jm666
fonte
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.

airbjorn
fonte
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.

Mike
fonte
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.

jbrios777
fonte
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

Ilya Gazman
fonte
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'

Laurent Caillette
fonte
-1

Para saber a lista de java rodando na máquina linux. ps -e | grep java

Kiran Jallepalli
fonte