Java, checking for any process id on Windows

Is it possible to verify the existence of a process with Java on Windows.

I have a possible PID, I want to know if it works yet or not.

+4
source share
3 answers

See if this can help:

http://blogs.oracle.com/vaibhav/entry/listing_java_process_from_java

This article explains how to get all the PIDs running on a Windows machine: you will have to compare the output of the cmd call with your PID, rather than printing it.

If you are using Unix-like systems, you will have to use ps instead of cmd

Calling system commands from your java code is not a very portable solution; then again the implementation of the processes differs between operating systems.

+2
source

How to check if pid works on Windows with Java:

Windows task list command:

The DOS tasklist shows some output about which processes are running:

 C:\Documents and Settings\eric>tasklist Image Name PID Session Name Session# Mem Usage ========================= ====== ================ ======== ============ System Idle Process 0 Console 0 28 K System 4 Console 0 244 K smss.exe 856 Console 0 436 K csrss.exe 908 Console 0 6,556 K winlogon.exe 932 Console 0 4,092 K .... cmd.exe 3012 Console 0 2,860 K tasklist.exe 5888 Console 0 5,008 K C:\Documents and Settings\eric> 

The second column is the PID

You can use tasklist to get information about a specific PID:

 tasklist /FI "PID eq 1300" 

prints:

 Image Name PID Session Name Session# Mem Usage ========================= ====== ================ ======== ============ mysqld.exe 1300 Console 0 17,456 K C:\Documents and Settings\eric> 

The answer means that the PID is running.

If you request a PID that does not exist, you will receive the following:

 C:\Documents and Settings\eric>tasklist /FI "PID eq 1301" INFO: No tasks running with the specified criteria. C:\Documents and Settings\eric> 

Java function could do this automatically automatically

This function will only work on Windows systems with tasklist .

 import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; public class IsPidRunningTest { public static void main(String[] args) { //this function prints all running processes showAllProcessesRunningOnWindows(); //this prints whether or not processID 1300 is running System.out.println("is PID 1300 running? " + isProcessIdRunningOnWindows(1300)); } /** * Queries {@code tasklist} if the process ID {@code pid} is running. * @param pid the PID to check * @return {@code true} if the PID is running, {@code false} otherwise */ public static boolean isProcessIdRunningOnWindows(int pid){ try { Runtime runtime = Runtime.getRuntime(); String cmds[] = {"cmd", "/c", "tasklist /FI \"PID eq " + pid + "\""}; Process proc = runtime.exec(cmds); InputStream inputstream = proc.getInputStream(); InputStreamReader inputstreamreader = new InputStreamReader(inputstream); BufferedReader bufferedreader = new BufferedReader(inputstreamreader); String line; while ((line = bufferedreader.readLine()) != null) { //Search the PID matched lines single line for the sequence: " 1300 " //if you find it, then the PID is still running. if (line.contains(" " + pid + " ")){ return true; } } return false; } catch (Exception ex) { ex.printStackTrace(); System.out.println("Cannot query the tasklist for some reason."); System.exit(0); } return false; } /** * Prints the output of {@code tasklist} including PIDs. */ public static void showAllProcessesRunningOnWindows(){ try { Runtime runtime = Runtime.getRuntime(); String cmds[] = {"cmd", "/c", "tasklist"}; Process proc = runtime.exec(cmds); InputStream inputstream = proc.getInputStream(); InputStreamReader inputstreamreader = new InputStreamReader(inputstream); BufferedReader bufferedreader = new BufferedReader(inputstreamreader); String line; while ((line = bufferedreader.readLine()) != null) { System.out.println(line); } } catch (Exception ex) { ex.printStackTrace(); System.out.println("Cannot query the tasklist for some reason."); } } } 

The above Java code prints a list of all running processes, then prints:

 is PID 1300 running? true 
+3
source

the code:

 boolean isStillAllive(String pidStr) { String OS = System.getProperty("os.name").toLowerCase(); String command = null; if (OS.indexOf("win") >= 0) { log.debug("Check alive Windows mode. Pid: [{}]", pidStr); command = "cmd /c tasklist /FI \"PID eq " + pidStr + "\""; return isProcessIdRunning(pidStr, command); } else if (OS.indexOf("nix") >= 0 || OS.indexOf("nux") >= 0) { log.debug("Check alive Linux/Unix mode. Pid: [{}]", pidStr); command = "ps -p " + pidStr; return isProcessIdRunning(pidStr, command); } log.debug("Default Check alive for Pid: [{}] is false", pidStr); return false; } boolean isProcessIdRunning(String pid, String command) { log.debug("Command [{}]",command ); try { Runtime rt = Runtime.getRuntime(); Process pr = rt.exec(command); InputStreamReader isReader = new InputStreamReader(pr.getInputStream()); BufferedReader bReader = new BufferedReader(isReader); String strLine = null; while ((strLine= bReader.readLine()) != null) { if (strLine.contains(" " + pid + " ")) { return true; } } return false; } catch (Exception ex) { log.warn("Got exception using system command [{}].", command, ex); return true; } } 
+1
source

Source: https://habr.com/ru/post/1305373/


All Articles