GNU/Linux >> Linux Esercitazione >  >> Linux

Ottieni l'ID del sottoprocesso in Java

Ho provato (e fallito) a farlo qualche tempo fa. Ho finito per avvolgere il mio comando in uno script di shell che ha scaricato il pid in un file. Non è la soluzione migliore, ma mi ha permesso di superare questo ostacolo.


Non esiste ancora un'API pubblica per questo (vedi http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4244896) ma ci sono soluzioni alternative.

Una prima soluzione sarebbe usare un programma esterno come ps e chiamarlo usando Runtime.exec() per ottenere il pid :)

Un altro si basa sul fatto che il java.lang.Process class è astratta e che in realtà ottieni una sottoclasse concreta a seconda della tua piattaforma. Su Linux, otterrai un java.lang.UnixProcess che ha un campo privato int pid . Usando la riflessione, puoi facilmente ottenere il valore di questo campo:

Field f = p.getClass().getDeclaredField("pid");
f.setAccessible(true);
System.out.println( f.get( p ) );

Linux
  1. Linux:come far funzionare Oracle Java 7 con Setcap Cap_net_bind_service+ep?

  2. Quale processo ha Pid 0?

  3. Come far funzionare Webex completamente con Ubuntu 12.04?

  4. Ottieni in modo programmatico il pid genitore di un altro processo?

  5. Come posso ottenere la cartella temporanea di una macchina che esegue Maven?

Come installare Java su Linux

Come controllare la versione Java

Come ottenere il PID in base al nome del processo?

Uccidere il sottoprocesso avviato da sudo in python

Come ottenere il pid di un processo e invocare kill -9 su di esso nello script della shell?

Come ottenere il pid del processo appena avviato