Get a PID given a process nameTag(s): Environment
This solution is Windows only, we launch WMIC utility and capture its output to retrieve PIDs for given process name.
For a Java solution see below
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class WindowsUtils {
private WindowsUtils() {}
// returns an ArrayList of the Pids given a processname (the executable name), empty if none
public static ArrayList<Long> getPids(String processName) throws IOException {
InputStream is = null;
InputStreamReader isr = null;
BufferedReader br = null;
ArrayList<Long> pids = new ArrayList<Long>();
List<String> commands = new ArrayList<String>();
commands.add("WMIC");
commands.add("process");
commands.add("where");
commands.add("name='"+ processName+"'");
commands.add("get");
commands.add("processid");
String line;
try {
ProcessBuilder builder = new ProcessBuilder(commands);
Process process = builder.start();
is = process.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
// first line is a header if we have a result
line = br.readLine();
if ("processid".equalsIgnoreCase(line.trim())) {
System.out.println("*** " + line);
// next line are the PIDs
while ((line = br.readLine()) != null) {
if (line.trim().length() > 0) {
pids.add(Long.parseLong(line.trim()));
}
}
}
else {
System.out.println(line);
}
return pids ;
}
finally {
if (br != null) br.close();
if (isr != null) isr.close();
if (is != null) is.close();
}
}
public static void main(String[] args) throws IOException {
System.out.println(WindowsUtils.getPids("notepad++.exe"));
}
}
import java.io.IOException;
import java.lang.ProcessHandle.Info;
import java.util.ArrayList;
import java.util.stream.Stream;
public class WindowsUtils9 {
private WindowsUtils9() {}
// returns an ArrayList of the Pids given a processname, empty if none
// JDK9
public static ArrayList<Long> getPids(String processName) throws IOException {
ArrayList<Long> pids = new ArrayList<Long>();
Stream<ProcessHandle> processStream = ProcessHandle.allProcesses();
Stream<ProcessHandle> toReturnProcessHandle = processStream.filter(processHandle -> {
if(processHandle.isAlive()){
Info info = processHandle.info();
if(info.command().toString().toLowerCase().endsWith(processName.toLowerCase()+"]")){
return true;
}
}
return false;
});
toReturnProcessHandle.forEach(handle-> pids.add(handle.pid()));
return pids;
}
public static void main(String[] args) throws IOException {
System.out.println(WindowsUtils9.getPids("notepad++.exe"));
}
}
import java.io.IOException;
public class ProcessBuilderGetPidDemoDemo
{
public static void main(String[] args) throws IOException {
Process p = new ProcessBuilder("notepad.exe").start();
System.out.println(`The PID for notepad.exe is " + p.getPid());
}
}
mail_outline
Send comment, question or suggestion to howto@rgagnon.com
Send comment, question or suggestion to howto@rgagnon.com