如何检查进程是否在Windows上运行?

时间:2016-02-01 11:31:48

标签: java windows process

我想要做的是一个程序,以了解Windows上的Java处于活动状态的流程是否可以在tasklist中使用它。我在互联网上找到了两种不同的解决方案:

但它根本不是我要找的东西。

根据选项1,我想要一种方法来引用该过程(并检测它是否处于活动状态/正在运行),但不进行完整的tasklist /?搜索,然后进行搜索。我正在寻找是否有直接的方法来做到这一点。

我还想在任务列表中添加一个过滤器,但找不到任何过滤器来获取我正在寻找的过程。我在命令行上使用wmic看到了所有选项。

然后我搜索了有关第二个选项和wmic(我以前从未听过)的信息,似乎wmic允许您在命令行上执行任务(如果我错了请更正我)。

所以,我在这里有两个问题

  • 是否有直接的方法来了解Windows上的进程是否处于活动状态?尽量避免在完整的任务列表中搜索或使用<!-- Admin Login Modal --> <div id="admin-login-modal" class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-hidden="true"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button> <h4 class="modal-title" id="myModalLabel">Modal title</h4> </div> <div class="modal-body"> <h4>Text in a modal</h4> <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p> <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> <button type="button" class="btn btn-primary">Save changes</button> </div> </div> </div> </div> <!-- End Login Modal -->

  • 如果不可能,如果我们谈论有效的编程,我上面提到的两个选项会更好吗?

提前致谢!

3 个答案:

答案 0 :(得分:3)

没有直接的方法来查询一般过程,因为每个操作系统处理它们的方式不同 你有点使用代理,如直接操作系统命令......

可以但是,使用带有 / fi 参数的tasklist.exe查找特定进程。
例如:void io_set(int fd) { if (options[OptSetInput]) { if (doioctl(fd, VIDIOC_S_INPUT, &input) == 0) { struct v4l2_input vin; printf("Video input set to %d", input); vin.index = input; if (test_ioctl(fd, VIDIOC_ENUMINPUT, &vin) >= 0) printf(" (%s: %s)", vin.name, status2s(vin.status).c_str()); printf("\n"); } } // snip... }
请注意强制性双引号 语法和用法可在MS Technet site上找到。

相同的例子,在Java中过滤“chrome.exe”:

tasklist.exe /nh /fi "Imagename eq chrome.exe"

答案 1 :(得分:0)

最好的方法是从java实例启动进程。这种方法的优点是,您可以完全确定正在运行的进程是您启动的进程。使用tasklist,普通用户可以以名称作为目标启动进程,或者在程序关闭时重用pid。

有关如何开始流程的信息,请参阅this问题。

Process myProcess = Runtime.getRuntime().exec(command);

然后,您可以使用Process的方法来监视程序的状态,例如myProcess.exitValue()阻塞,直到程序关闭。

答案 2 :(得分:0)

使用Java 9,您可以这样做:

Optional<ProcessHandle> processHandle = ProcessHandle.of(pid);
boolean isrunning = processHandle.isPresent() && processHandle.get().isAlive();

您现在也可以直接使用java获取有关该过程的一些信息。

Optional<ProcessHandle> processHandle = ProcessHandle.of(pid);
if(processHandle.isPresent()) {
 ProcessHandle.Info processInfo = processHandle.get().info();
 System.out.println("COMMAND: " + processInfo.command().orElse(""));
 System.out.println("CLI: " + processInfo.commandLine().orElse(""));
 System.out.println("USER: " + processInfo.user().orElse(""));
 System.out.println("START TIME: " + processInfo.startInstant().orElse(null));
 System.out.println("TOTAL CPU: " + processInfo.totalCpuDuration().orElse(null));

}