我是一个刚开始学习基于Java的多线程编程的学生。作为我的第一个练习之一,我被告知创建一个执行 Windows 计算器的进程,然后等待该进程完成,然后发送消息。这是我所做的代码的摘录。Process p = Runtime.getRuntime().exec("calc.exe");p.waitFor();System.out.println("Process finished");当我执行它时,Windows 10 计算器打开,然后我收到“处理完成”消息。我不知道为什么在进程仍在运行时收到消息,因为计算器是打开的,所以我尝试运行完全相同的代码,但使用“notepad.exe”作为要执行的命令。这次执行的结果是预期的:直到我关闭记事本才收到消息。我尝试打开其他Windows 10默认程序,作为“explorer.exe”,有些程序按照它应该的方式工作,而其他程序则没有。我对它的工作方式的想法是“explorer.exe”或“calc.exe”像某种启动器一样工作,所以当他们收到一个执行它们的进程时,他们创建自己的进程,我无法用Java控制程序。这完全是我的猜测。在实际的问题是:为什么会发生呢?Windows 10 计算器和其他程序在进程方面如何工作?提前致谢。
1 回答
吃鸡游戏
TA贡献1829条经验 获得超7个赞
Process#waitFor()返回int值,它实际上errorlevel是进程的退出代码(即)。
如果启动的进程返回非零errorlevel并且“正确”(即按预期)工作,否则您的代码会失败。您可以通过运行下面的批处理文件来检查它:
@echo off
calc.exe
REM explorer.exe
echo Error level: %errorlevel%
它会回报你的环境非零errorlevel输出的calc.exe和Explorer.exe的,并0为NOTEPAD.EXE。
在我的环境(Windows 7)上,calc.exe也会返回0并且您的代码片段按预期工作。
还请考虑到某些程序在成功的情况下可能会返回非零退出代码 - 这不是严格的。
基于这一点以及第一个练习不应该太复杂的事实 - 假设您的代码片段就是答案。
如果无论如何您仍然需要找到解决方案,您可以这样做(这里是批处理命令,而不是Java):
运行calc.exe:
calc.exe
查找PID的的的calc.exe进程:
tasklist /v /fo csv | findstr /i "calc.exe"
通过运行该过程的无限检查PID与
break;
当处理不再被呈现,使用命令(假设例如PID = 1111
):tasklist /fi "pid eq 1111"
添加回答
举报
0/150
提交
取消