Pegando processos do Linux com java

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();  
	     }  
	}

}

Mas quando rodo esta classe não é impresso nada.

Alguém sabe pq está acontecendo isso?

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:

tente o seguinte:

 Process p = Runtime.getRuntime().exec("/bin/bash -c 'ps -ef | grep java'"); //aqui fica o comando que vai pegar os processos  

É que o “|” tem de ser interpretado pelo interpretador de comandos (no seu caso o bash, mas você pode usar outro.)

É ainda não funcionou…
Não printa nada. Que doidera :shock:

Eu testei, o correto é:

Process p = Runtime.getRuntime().exec (new String[] {
    "/bin/bash",
    "-c",
    "ps -ef | grep java"
});

Não ponha tudo em uma linha só, que não deu certo.