Como posso listar todos os processos Java no bash? Eu preciso de uma linha de comando. Eu sei que existe um comando, ps
mas não sei quais parâmetros preciso usar.
linux
bash
unix
command-line
Jacek Koralik
fonte
fonte
ps
, em seguida, tente primeiroman ps
,info ps
e aprender sobre ele na Internet.Respostas:
experimentar:
e veja como você se sai
fonte
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,
fonte
é muito útil. Imprime apenas pid e nome de classe principal qualificado:
fonte
Você também pode usar o comando pgrep único (não requer o uso de tubos e comandos múltiplos):
fonte
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:
Mais detalhes sobre como usar
jcmd
.Veja também o
jcmd
Utilitáriofonte
jps
Para um melhor formato de saída, verifique este comando:
fonte
Isso retornará todos os processos Java em execução no ambiente linux. Em seguida, você pode encerrar o processo usando o ID do processo.
fonte
ps aux | grep java
ou
$ ps -fea|grep -i java
fonte
Se eu quiser simplesmente listar os processos java, use:
fonte
fonte
grep
processo?O acima vai
(aliás, este exemplo não é eficaz, mas é simples de lembrar);)
você pode canalizar o acima para outros comandos, por exemplo:
etc ...
fonte
Quando quero saber se uma determinada classe Java está sendo executada, uso a seguinte linha de comando:
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.
fonte
$ top
apenas fornece "java" como o comando, o que não é muito útil ao tentar descobrir qual processo está monopolizando a CPU.$ ps ww -fC java
fornece as peças que faltam do quebra-cabeça.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.
Os resultados são semelhantes a:
Uma alternativa no Windows para listar todos os processos é:
Mas isso vai precisar de alguma análise para torná-lo mais legível.
fonte
Existem muitas maneiras de fazer isso. Você pode usar
java.lang.ProcessBuilder
e "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
fork
ejoin
processos 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.fonte
É melhor porque só vai mostrar os processos ativos sem incluir este comando que também tem uma string java que
[]
faz o truquefonte
Eu uso isso (bom no Debian 8):
alias psj='ps --no-headers -ww -C java -o pid,user,start_time,command'
fonte
Para saber a lista de java rodando na máquina linux. ps -e | grep java
fonte