Get Process ID of Linux Process that started using Java (Runtime.getRuntime().exec(command))
Hi my friends, we know how to start a sub-program from java using Runtime.getRuntime().exec(command). But how to get process id ?
Here is the answer,
Process proc = Runtime.getRuntime().exec(command);
Field f = proc.getClass().getDeclaredField("pid");
f.setAccessible(true);
System.out.println("Process ID : " + f.get(proc));
Here is the answer,
java.lang.Process
class is abstract and that you actually get a concrete subclass depending on your platform. On Linux, you'll get a java.lang.UnixProcess
which has a private field int pid
.Process proc = Runtime.getRuntime().exec(command);
Field f = proc.getClass().getDeclaredField("pid");
f.setAccessible(true);
System.out.println("Process ID : " + f.get(proc));
Example :
import java.lang.reflect.Field; public class TestCMD { public static void main(String[] args) { String cmd = "echo HelloAll"; int processId = execute(cmd); System.out.println("Process ID : " + processId); } private static int execute(String command) { int pid = 0; try { Process proc = Runtime.getRuntime().exec(command); Field f = proc.getClass().getDeclaredField("pid"); f.setAccessible(true); pid = (int) f.get(proc); } catch (Exception e) { e.printStackTrace(); } return pid; } }