我想知道如何"杀死"一个已启动的进程.我知道Process API,但我不确定,如果我可以使用它来"杀死"已经运行的进程,例如firefox.exe等.如果可以使用Process API,请指点我进入正确的方向?如果没有,其他可用选项有哪些?谢谢.
Lak*_*gha 58
在Windows上,您可以使用此命令
taskkill /F /IM <processname>.exe
Run Code Online (Sandbox Code Playgroud)
强行杀死它.所以它会
Runtime.getRuntime().exec("taskkill /F /IM <processname>.exe")
Run Code Online (Sandbox Code Playgroud)
Yoh*_*age 54
如果从Java应用程序中启动进程(例如,通过调用Runtime.exec()或ProcessBuilder.start()),那么您有一个对它的有效Process引用,并且您可以destroy()在Process类中调用该方法来终止该特定进程.
但请注意,如果您调用的进程创建新的子进程,则可能不会终止这些进程(请参阅http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4770092).
另一方面,如果你想要杀死外部进程(你没有从你的Java应用程序产生),那么你可以做的一件事就是调用O/S实用程序来实现这一点.例如,您可以在Unix/Linux下尝试Runtime.exec()on kill命令并检查返回值以确保应用程序被杀死(0表示成功,-1表示错误).但这当然会使您的应用程序平台依赖.
chr*_*hro 31
AFAIU java.lang.Process是java本身创建的进程(如Runtime.exec('firefox'))
您可以使用与系统相关的命令
Runtime rt = Runtime.getRuntime();
if (System.getProperty("os.name").toLowerCase().indexOf("windows") > -1)
rt.exec("taskkill " +....);
else
rt.exec("kill -9 " +....);
Run Code Online (Sandbox Code Playgroud)
Xav*_*hot 11
使用Java 9,我们可以使用ProcessHandle,它可以更轻松地识别和控制本机进程:
ProcessHandle
.allProcesses()
.filter(p -> p.info().commandLine().map(c -> c.contains("firefox")).orElse(false))
.findFirst()
.ifPresent(ProcessHandle::destroy)
Run Code Online (Sandbox Code Playgroud)
其中“firefox”是要杀死的进程。
这个:
首先列出系统上运行的所有进程作为 Stream<ProcessHandle>
延迟过滤此流以仅保留其启动的命令行包含“firefox”的进程。两者commandLine或command都可以使用,具体取决于我们希望如何检索进程。
查找第一个满足过滤条件的过滤进程。
如果至少一个进程的命令行包含“firefox”,则使用destroy.
不需要导入,因为它ProcessHandle是java.lang.