Estou tentando pegar um processo no linux e estou usando este comando “ps -ef | grep java”, que pega o processo pelo nome.
E gostaria de usar isso em uma classe java, por exemplo, rodo um java test.Test e quero que a classe me mostre que este processo está rodando.
Estou fazendo desta maneira:
package test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class TestProcess {
public static void main(String[] args) {
try {
Process p = Runtime.getRuntime().exec("ps -ef | grep java"); //aqui fica o comando que vai pegar os processos
BufferedReader resultado = new BufferedReader(new InputStreamReader(p.getInputStream()));
//mostra os resultados obtidos pelo comando 'ps ax'
System.out.println("START");
String s;
while ((s = resultado.readLine()) != null)
System.out.println(s);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Eu tenho o código igual ao seu que funciona perfeitamente em Windows…
A únicas coisas que eu consigo pensar é se o usuário que está executando o comando Java não tem permissão suficiente ou se o seu bash não deixa por algum problema.
Eu estou como root e executo um processo primeiro em java, como root, depois excuto outro para pegar a classe que foi executada antes, também como root.
Quando eu coloco só ps -ef ou ps -ax funciona legal, mas quando coloco ps -ef | grep java alguma coisa não printa nada na tela, mas quando executo o mesmo comando na linha de comando do linux funciona… :shock: