Well the title pretty much sums the question. The only thing I found is this but I'm not sure if thats the way to go.
-
5Ambiguous question. Do you want to figure out if the Windows process is a java app, or do you want to figure out how a Java app can tell if it is running on Windows? – Stephen C Feb 23 '10 at 13:05
-
2What do you have to work with? A process ID? The name of the executable? Did you start the process? Are you waiting to see if it finished yet? Basically why do you want to check if it's running. There are different techniques depending on the situation. – Logan Capaldo Feb 23 '10 at 13:11
-
2@Stephen C you are completely right, I wasn't clear enough! I want to know how to programmatically see if for example notepad.exe is running or if firefox.exe is running etc... hope that clears it out :) – Feb 23 '10 at 14:21
5 Answers
You can use the wmic utility to check the list of running processes.
Suppose you want to check if the windows' explorer.exe process is running :
String line;
try {
Process proc = Runtime.getRuntime().exec("wmic.exe");
BufferedReader input = new BufferedReader(new InputStreamReader(proc.getInputStream()));
OutputStreamWriter oStream = new OutputStreamWriter(proc.getOutputStream());
oStream .write("process where name='explorer.exe'");
oStream .flush();
oStream .close();
while ((line = input.readLine()) != null) {
System.out.println(line);
}
input.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
See http://ss64.com/nt/wmic.html or http://support.microsoft.com/servicedesks/webcasts/wc072402/listofsampleusage.asp for some example of what you can get from wmic...
2022 update
As you can see in the link above, wmic was deprecated in Windows 10. The good news is that now the ps
command works on windows 10 under powershell, so you can get your "cross-platform" support with something like this (untested):
public class ProcessInfo {
static boolean isProcessRunning(String processName) {
String[] command = new String[]{ "powershell", "ps", processName };
try {
if (System.getProperty("os.name").toLowerCase().contains("linux")) {
command = new String[]{ "ps", "-o", "comm" };
}
Process ps = new ProcessBuilder(command).start();
return new BufferedReader(
new InputStreamReader(ps.getInputStream(), StandardCharsets.UTF_8)
).lines().anyMatch(line -> line.contains(processName));
} catch (IOException e) {
throw new RuntimeException(String.join(" ", command) + ": No such command on this OS.");
}
}
}

- 6,703
- 3
- 30
- 50
-
-
Is it possible to then work out how to kill a running process from the windows handle id? – JARC May 04 '12 at 09:20
-
Thanks for the nice example. Is there though any way to handle this issue platform independently? I need this functionality under Linux and Apple as well. – Socrates Jan 03 '17 at 04:22
-
Depends on what you need to know it for!
Most information can be derived from the default runtime properties, without actually checking the operating system properties.
Have a look at what http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#getProperties() provides:
java.version Java Runtime Environment version
java.vendor Java Runtime Environment vendor
java.vendor.url Java vendor URL
java.home Java installation directory
java.vm.specification.version Java Virtual Machine specification version
java.vm.specification.vendor Java Virtual Machine specification vendor
java.vm.specification.name Java Virtual Machine specification name
java.vm.version Java Virtual Machine implementation version
java.vm.vendor Java Virtual Machine implementation vendor
java.vm.name Java Virtual Machine implementation name
java.specification.version Java Runtime Environment specification version
java.specification.vendor Java Runtime Environment specification vendor
java.specification.name Java Runtime Environment specification name
java.class.version Java class format version number
java.class.path Java class path
java.library.path List of paths to search when loading libraries
java.io.tmpdir Default temp file path
java.compiler Name of JIT compiler to use
java.ext.dirs Path of extension directory or directories
os.name Operating system name
os.arch Operating system architecture
os.version Operating system version
file.separator File separator ("/" on UNIX)
path.separator Path separator (":" on UNIX)
line.separator Line separator ("\n" on UNIX)
user.name User's account name
user.home User's home directory
user.dir User's current working directory

- 73,784
- 33
- 194
- 347
You are trying to determine if a process you created is still running?
- If you have the PID the link you posted will do.
- If the other process is also your own (your code), you can make it get exclusive lock on a file; try locking it from the other code if it succeeds the other process is not running.

- 73,784
- 33
- 194
- 347

- 2,823
- 1
- 27
- 39
I have not tried in non Windows based systems. perhaps the PID divisibility by 4 will provide a clue More info on this PID propery here : About the pid of the process
and here http://blogs.msdn.com/oldnewthing/archive/2008/02/28/7925962.aspx

- 1
- 1

- 3,968
- 6
- 40
- 48