2011-10-14 15 views

risposta

6

Si potrebbe provare ps -aux | grep foobar per ottenere il pid, poi dando il comando kill contro di esso, in alternativa, si potrebbe desiderare di utilizzare pkillfoobar, in entrambi i casi foobar è il nome della app che si desidera terminare.

0

probabilmente dovrete per invocare la ps e kill comandi Unix utilizzando Runtime.exec e raschiare la loro produzione. Non penso che un programma Java possa facilmente ispezionare/accedere ai processi che non ha creato.

1

Se si avvia questa applicazione dallo script è possibile ottenere il pid dell'ultimo processo creato in background utilizzando la variabile speciale $!, questo valore che è possibile salvare su un file per un utilizzo successivo sulla funzione di arresto.

Di seguito è riportato un esempio:

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

PID di processi Java per -e.g ps -aux | grep java | awk '{print $2}'.

È inoltre possibile chiamare jps che fornirà un elenco di processi. Uno svantaggio di questo è che mostrerà solo i processi per l'utente che emette il comando jps.

3

è possibile utilizzare pidof per ottenere il pid dell'applicazione

pidof <application name>

1

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

in Ubuntu, ps -aux genera un errore di sintassi, dove ps aux opere.

l'uscita viene convogliata a awk che corrisponde a linee con java e dorme per 10 secondi, quindi uccide il programma con il punto. nota la pipa per colpire. Sentiti libero di specificare per quanto tempo desideri, o di chiamare qualsiasi altra chiamata tu ritenga appropriata. Noto che la maggior parte delle altre risposte trascurate per catturare la parte "dopo un certo periodo di tempo" del questionario.

si potrebbe anche realizzare questo chiamando pidof java | awk '{print "sleep 10; kill "$1}' | bash ma la scelta è vostra. Generalmente uso ps aux.

3

Che ne dite di questo allora?

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