user6618770
user6618770

Reputation: 77

Get working directory of another Java process

I can get working directory of current Java program using this code: Path path = Paths.get(*ClassName*.class.getProtectionDomain().getCodeSource().getLocation().toURI());

Also I can get CommandLine parameters (but there is no directory in the output) of running Java processes using this command wmic process get CommandLine where name='java.exe' /value

It is possible to get working directory of another Java process (better programmatically)? Probably it can be solved with some jdk/bin utilities?

Upvotes: 2

Views: 684

Answers (1)

Holger
Holger

Reputation: 298469

You can get this information via the Attach API. To use it, you have to add the tools.jar of your jdk to your class path. Then, the following code will print the current working directories of all recognized JVM processes:

for(VirtualMachineDescriptor d: VirtualMachine.list()) {
    System.out.println(d.id()+"\t"+d.displayName());
    try {
        VirtualMachine vm = VirtualMachine.attach(d);
        try(Closeable c = vm::detach) {
            System.out.println("\tcurrent dir: "+vm.getSystemProperties().get("user.dir"));
        }
    }
    catch(AttachNotSupportedException|IOException ex) {
        System.out.println("\t"+ex);
    }
}

Upvotes: 2

Related Questions