我想要做的是一个程序,以了解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 -->
。
如果不可能,如果我们谈论有效的编程,我上面提到的两个选项会更好吗?
提前致谢!
答案 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));
}