我不知道OSHI库,但您可以使用下面的方法来获取PID。
阅读代码中的注释:
/**
* ** FOR WINDOWS ONLY **<br><br>
* <p>
* Retrieves the PID value(s) for all instances of the supplied process that
* is running and returns them within a comma (,) delimited String.<br><br>
* <p>
* Note: Some applications like MS WORD (winword.exe) for example will not
* report multiple instances of itself. This is because when you open
* another MS WORD what you are really doing is simply opening another MAIN
* WINDOW of MS WORD which is an integral part of the initial MS WORD opened
* first, it's not another process. So, in other words, if MS WORD is
* already running and you start another instance of it what happens is that
* the application first looks to see if it is already running and if it is
* then it just opens another Main Window giving the impression that it is
* another process. If MS WORD is not running already then a new process is
* started. Many different types of applications can do this sort of
* thing.<br><br>
*
* @param processName (String) Supply the executable name, for example:
* "winword.exe". Will work also if only "winword" or
* "Notepad" is supplied (as examples).<br>
*
* @param ignoreLetterCase (Optional - Boolean - Default is true) If set to
* true the this method will ignore letter Case when
* trying to located the desired process.<br>
*
* @return (String) The PID as String for the supplied application or process
* name. If there is more than one instance of the application or process then
* a comma delimited string string will be returned consisting of a PID for each
* instance. It will be up to you to determine which PID belongs to which instance.
*/
public static String getProcessPID(String processName, boolean... ignoreLetterCase) {
String pid = "";
boolean ignoreCase = true;
if (ignoreLetterCase.length > 0) {
ignoreCase = ignoreLetterCase[0];
}
// Acquire the Task List from Windows
ProcessBuilder processBuilder = new ProcessBuilder("tasklist.exe");
Process process;
try {
process = processBuilder.start();
}
catch (java.io.IOException ex) {
return "";
}
// Read the list and grab the desired PID
String tasksList;
try (Scanner scanner = new Scanner(process.getInputStream(), "UTF-8").useDelimiter("\\A")) {
int counter = 0;
String strg = "";
while (scanner.hasNextLine()) {
strg = scanner.nextLine();
// Uncomment the line below to print the current Tasks List to Console Window.
// System.out.println(strg);
if (!strg.isEmpty()) {
counter++;
if (counter > 2) {
if (ignoreCase) {
if (strg.toLowerCase().contains(processName.toLowerCase())) {
String[] tmpSplit = strg.split("\\s+");
pid += (pid.isEmpty()) ? tmpSplit[1] : ", " + tmpSplit[1];
}
}
else {
if (strg.contains(processName)) {
String[] tmpSplit = strg.split("\\s+");
pid += (pid.isEmpty()) ? tmpSplit[1] : ", " + tmpSplit[1];
}
}
}
}
}
}
return pid;
}
问题内容: 我想在Windows中杀死特定的Java进程,例如在Linux中(获取processid然后杀死该进程)。 问题答案: 您可以使用JRE中包含的实用程序来查找Java进程的进程ID。输出将显示可执行JAR文件的名称或主类的名称。 然后使用Windows任务管理器终止该过程。如果要在命令行上执行此操作,请使用
问题内容: 我有一个批处理文件,可在Windows 2003服务器中启动Java进程。根据安全策略,如果用户在特定时间段内处于非活动状态,则该计算机的用户将被强制注销。问题在于,当用户注销时,该过程也会终止。 我安排了一个新任务(“控制面板”->“计划任务”),并选择了“计算机启动时”选项,并在那里提供了用户帐户详细信息。但这似乎没有任何效果,用户仍然注销并且该进程终止。是否需要重新启动才能使此更
如何在将GUI保持为活动状态而不是Hibernate/等待状态的同时延迟进程或创建队列?
问题内容: 我目前正在JAVA中构建一个应用程序,其中只能执行一次。因此,我当前正在使用一个锁定文件,在其中写入当前执行的PID。 因此,只要此应用程序启动,它将打开文件(如果存在)并尝试检测写入文件的PID是否正在实际运行。 这样可以防止我的应用在解锁文件之前崩溃的问题。 我需要它在Windows(XP,7或8)和linux(所有用户都在基于debian的发行版)上工作。 这是一些代码,可以让您
问题内容: 我编写了一个Java程序,该程序使用Google Analytic API检索到目前为止的Google数据并将其导出为CSV文件。我希望该程序每天运行,以便CSV文件中的数据是最新的。我该如何实现? 问题答案: 您可以使用Windows Task Scheduler(请参阅教程)来启动任何程序。对于Java,您可能需要创建一个批处理文件来运行Java程序,然后使用Scheduler运行
问题内容: 我正在尝试从Windows中的命令行执行Java程序。这是我的代码: 我不确定如何执行程序-有帮助吗?在Windows上可以吗?为什么它不同于另一个环境(我以为JVM只写一次,可以在任何地方运行)? 问题答案: 假设你的文件位于 运行命令提示符 这使C:\ mywork成为当前目录。 这将显示目录内容。你应该在文件中看到。 这告诉系统在哪里可以找到JDK程序。 这将运行编译器。除了下一