Problemas :: Retorno de getRuntime().exec

Olá pessoal,

Estou desenvolvendo uma classe para verificar se um processo está ativo no linux. Para isso estou usando o seguinte código:

[code]
try {
String line;
Process p = Runtime.getRuntime().exec(“ps ax|grep nomeprocesso”);
BufferedReader input =new BufferedReader (new InputStreamReader(p.getInputStream()));

      while ((line = input.readLine()) != null) 
      {   
        System.out.println("Res: "+line);   
      }   

      input.close();
 } catch (Exception err) {   
     return statusrs;
 } 

[/code]Não sei porque motivo, a variável imput, usando o comando readLine está me retornando null, sendo que o processo está ativo, deveria mostrar umas 5 linhas.
Alguém poderia me orientar quanto ao código?
Desde já agradeço…

olha eu nao manjo mto de linux, mais nao creio q mude no codigo java…pra fala a verdade nunca programei pra linux (mesmo em windows eu so iniciante)

assim mesmo, esse detalhe pode te ajuda… quando eu dei o getRuntime anteriormente, eu joguei o getInputStream em um objeto Scanner… talvez isso facilite…

testa o resultado desse código com um ping da vida…sei la executa pelo shell…

ai da pra vc saber se ta retornando null se pelo shell tb nao retorna nada, da pra ver se o ping retornoalguma coisa (em unix axo q vc tem q da um ping -<algo> senao ele fica pingando sem para…acho q é ping -c 5 por exemplo pra 5 pacotes…)

java.util.Scanner s = new java.util.Scanner( Runtime.getRuntime().exec(" comando ").getInputStream());

            while(s.hasNextLine()) {

                mensagem=s.nextLine();

}

testa ae…

Tente com:

  Process p = Runtime.getRuntime().exec("/bin/bash -c 'ps ax|grep nomeprocesso'");   

É que exec requer como primeiro parâmetro o nome de um executável. Se você passar 2 programas (que é o que você tentou fazer), é preciso fazer o shell interpretar o comando, e é por isso que uso /bin/bash -c ‘comando’.

[quote=thingol]Tente com:

  Process p = Runtime.getRuntime().exec("/bin/bash -c 'ps ax|grep nomeprocesso'");   

É que exec requer como primeiro parâmetro o nome de um executável. Se você passar 2 programas (que é o que você tentou fazer), é preciso fazer o shell interpretar o comando, e é por isso que uso /bin/bash -c ‘comando’.
[/quote]

Realmente, parece que o getRuntime tem problemas em executar mais de um comando.

Tentei pelas duas maneiras, com Bufferstream e Scanner, as duas deram os mesmos resultados.
Mesmo colocando o /bin/bash não deu certo, teria outra maneira???

Experimente usar simplesmente este comando um pouco mais complicado,

Process p = Runtime.getRuntime().exec(&quot;/bin/bash -c 'ps ax|grep nomeprocesso &gt; /tmp/teste.txt'&quot;);  

que não gera saída nenhuma, e então ler o arquivo /tmp/teste.txt que foi gerado pelo comando acima.