【问题标题】:How to kill a process that we started using exec in java {.exec("cmd /c"+command)}如何杀死我们在 java {.exec("cmd /c"+command)} 中开始使用 exec 的进程
【发布时间】:2017-08-01 04:52:42
【问题描述】:

所以,我在运行时类中使用 exec 方法在 java 中启动了一个进程。现在,我如何调用它如下。

Runtime r=Runtime.getRuntime(); 
Process p=null; 
String s="E:\\Softwares\\fiddler4setup.exe"; 
p=r.exec("cmd /c"+s);

现在,当我尝试使用 p.destroy() 方法销毁进程时。 Fiddler4setup.exe 仍在运行。我一直在寻找关闭这个的方法一个星期。即使在这里,这类问题也没有特别正确的答案。请帮我解决这个问题。

另外,直接运行文件也不起作用,因为我猜它会显示一些 704 错误。然后,我看到了这个使用“cmd /c”的解决方案。

谢谢。

【问题讨论】:

  • 应该可以不使用cmd.exe直接运行二进制Exe...所以我先调试一下为什么那个调用不起作用。
  • 我已经调试过了。据我所知,当我在 cmd @GhostCat
  • @GhostCat ,它统计一个错误: CreateProcess error=740, The requested operation requires elevation
  • 好了。因此,只需以管理员权限启动您的 Java 程序;分别要求您的用户这样做。显然,提升不是任何程序都可以自行触发的。

标签: java process runtime.exec destroy


【解决方案1】:

要杀死你的进程,你必须使用:

Taskkill /IM YourProcess.exe /F

或使用 PID

Taskkill /PID 26356 /F

所以你的程序应该是这样的:

Runtime r = Runtime.getRuntime();
Process p = r.exec("Taskkill /IM fiddler4setup.exe /F");

请注意,您可以在 cmd 中使用此命令 tasklist 获取进程的 PID,如果您使用 PID 来避免所有路径问题,这会更好。


编辑

没有明确的方法以管理员模式运行脚本,这里有一些问题希望能给你和想法:

Run command prompt as Administrator
Java: run as administrator
Run Java file as Administrator with full privileges

【讨论】:

  • 像我一样尝试不带路径,或者像我一样搜索任务的 PID 并杀死它@SunilSonu
  • 我正在使用 tasklist 获取 fiddler4setup 的 PID,然后使用上面的代码,但它不起作用。 @YCF_L
  • 直接在 shell 上运行该命令是否有效?而不是从 Java 调用它?
  • 我用 java 和 cmd 试试这个,但是用另一个进程而不是 fiddler4setup 并且它工作正常,我认为这是相同的逻辑 @GhostCat 还是我错了?
  • 即使在 shell 中,它也会显示“访问被拒绝”@GhostCat
猜你喜欢
  • 2019-07-13
  • 1970-01-01
  • 2021-11-21
  • 2021-12-14
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
相关资源
最近更新 更多