2011-10-14 665 views

Respuesta

6

Usted puede tratar de ps -aux | grep foobar para obtener el pid, luego de emitir el comando kill en contra de ella, como alternativa es posible que desee utilizar pkillfoobar, en ambos casos foobar siendo el nombre de la aplicación que desea terminar.

0

es probable que tenga que invocan la ps y kill comandos Unix usando Runtime.exec y raspar su producción. No creo que un programa Java pueda inspeccionar/acceder fácilmente a los procesos que no creó.

1

Si vas a empezar esta aplicación desde el guión se puede obtener el PID del último proceso que se creó en el fondo mediante el uso de la variable $! especial, este valor se puede guardar en un archivo para su uso posterior en su función de apagado.

A continuación se muestra un ejemplo:

nohup java -jar example.jar & 
echo $! > application.pid 
5

de pid para los procesos de java -e.g ps -aux | grep java | awk '{print $2}'.

También puede llamar al jps que le proporcionará una lista de procesos. Una desventaja de esto es que solo mostrará los procesos para el usuario que emite el comando jps.

3

puede utilizar pidof para obtener el PID de la aplicación

pidof <application name>

1

ps aux | awk '/java/ {print "sleep 10; kill "$2}' | bash

en Ubuntu, ps -aux genera un error de sintaxis, donde ps aux obras.

la salida se canaliza a awk que coincide con las líneas con java y duerme durante 10 segundos y luego mata el programa con el pId. nota el tubo para golpear. No dude en especificar el tiempo que desee o en llamar a cualquier otra llamada que considere apropiada. Noto que la mayoría de las demás respuestas omiten captar la parte de la pregunta "después de una cierta cantidad de tiempo".

También puede lograr esto llamando al pidof java | awk '{print "sleep 10; kill "$1}' | bash, pero la elección es suya. Generalmente uso ps aux.

3

¿Qué tal esto entonces?

public static void killAll(String process) { 
    try { 
     Vector<String> commands = new Vector<String>(); 
     commands.add("pidof"); 
     commands.add(process); 
     ProcessBuilder pb = new ProcessBuilder(commands); 
     Process pr = pb.start(); 
     pr.waitFor(); 
     if (pr.exitValue() != 0) return; 
     BufferedReader outReader = new BufferedReader(new InputStreamReader(pr.getInputStream())); 
     for (String pid : outReader.readLine().trim().split(" ")) { 
      log.info("Killing pid: "+pid); 
      Runtime.getRuntime().exec("kill " + pid).waitFor(); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
} 
Cuestiones relacionadas