Obtener PID (id de Proceso) desde Java

Iniciado por Lopardo, 5 Enero 2007, 14:56 PM

0 Miembros y 1 Visitante están viendo este tema.

Lopardo

Bueno les cuento.. Necesito saber como obtener el pid de proceso de una forma optima.

Esto es lo que he hecho. Pero es Poco optimo.

//Primero ejecuto el programa que quiero, desde Java.
Runtime.getRuntime().exec("cmd /c \""+rutaDelPrograma+"\"");

//Luego llamo este método que he hecho.

/*Este método lo que hace es que obtiene una lista de procesos activos haciendo uso del cmd de windows, busca el nombre del programa que le pasamos y obtiene el PID que se encuentre en la misma linea. */

public int obtenerPID(String programa) throws Exception
   {
            Process p = Runtime.getRuntime().exec("cmd /c tasklist /nh");
            InputStream is = p.getInputStream();
            BufferedReader br = new BufferedReader (new InputStreamReader(is));
            String tareaR = br.readLine();
            
            while(tareaR!=null)
            {
                StringTokenizer st = new StringTokenizer(tareaR," ");
                String nombre = st.nextToken();
                if(nombre.compareToIgnoreCase(programa)==0)
                  return Integer.parseInt(st.nextToken());
                tareaR = br.readLine();
            }   
       return -1;
   }

Bueno me parece que es un poco ineficiente ya que mientras más grande sea la lista de procesos más se tardará. Bueno y que en caso de haber dos procesos con el mismo nombre entonces se deberia preguntar si la PID del proceso ya fue registrada y esas cosas... Lo cual aumentaria más el tiempo.

Bueno mi pregunta es: ¿Hay algun método de Java que me haga esto?...

Saludos
...de la sabiduría.

cyberserver

Oie. pero en que SO probaste tu codigo?

Me manda este error:
Citarjava.util.NoSuchElementException

Sera que es por que utilizo Windows 7 ?

Mira esta es la implementacion de tu codigo.
Código (java) [Seleccionar]

import javax.swing.*;
import java.io.*;
import java.util.*;

public class PID {

    public static void main (String[] args){
    Comprobador Obj=new Comprobador();
    try{
    int Pid=Obj.obtenerPID("firefox.exe");
    JOptionPane.showMessageDialog(null,"PID es "+ Pid);
    }catch(Exception e){
    JOptionPane.showMessageDialog(null,e);
    }
   
}
}
class Comprobador{
public int obtenerPID(String programa) throws Exception
   {
            Process p = Runtime.getRuntime().exec("cmd /c tasklist /nh");
            InputStream is = p.getInputStream();
            BufferedReader br = new BufferedReader (new InputStreamReader(is));
            String tareaR = br.readLine();
           
            while(tareaR!=null)
            {
                StringTokenizer st = new StringTokenizer(tareaR," ");
                String nombre = st.nextToken();
                if(nombre.compareToIgnoreCase(programa)==0)
                  return Integer.parseInt(st.nextToken());
                tareaR = br.readLine();
            }   
       return -1;
   }
}






cyberserver

Ups. perdon ya escucho al moderador diciendo. No revivas temas Viejos  >:( >:(


Chale, no pues igual si es por el SO, el mensaje es del 5 de enero del 2007 de seguro el dueño ya ni vive no ma. jajajaj

Bueno si alguien me puede ayudar Se los agredeceria :)






Debci

#3
No pasa nada xDD todo sea por ayudar un poco.
Que no vuelva a ocurrir o tendré que cerrar el tema jeje
Miraré el source y os digo algo.
Edito: Estas seguro de que corres el firefox.exe al ejecutar el programa? Tienes permisos administrativos?

Saludos

cyberserver

Es que no te entiendo, que quieres decir aqui
CitarMiraré el source y os digo algo.
que Cheque el codigo y me dices algo? ? :o :o

Y sip, esta en uso el firefox si tengo permisos por eso es que me saco de onda, pero no puedo ver su PID :rolleyes: :rolleyes:
Siento que ese metodo ha de estar mal programado

Citar
java.util.NoSuchElementException: Esa excepcion salta cuando haces un next() a una coleccion que en realidad no tiene más elementos,

Pero no es tanto el codigo, eso se arregla.
El caso es. ¿Alguien de ustedes conoce otro metodo para ver el pid(IdentificadorDeProceso) de un proceso?






1mpuls0

abc

Debci

Piensa que esta muy muy restringido desde el nacegador, si no tienes permisos 100% olvidate...
Como dices que lo tienes, te hago una recomendación, no lo hagas de ese modo, usa JNI y aplica el API de windows al problema.

Saludos