当前位置: 首页 > 面试题库 >

使用Java杀死进程

章稳
2023-03-14
问题内容

我想知道如何“杀死”已启动的过程。我知道Process API,但是不确定,是否可以使用它来杀死已经运行的进程,例如firefox.exe等。如果可以使用Process API,可以请您指向正确的方向?如果没有,还有哪些其他可用选项?谢谢。


问题答案:

如果你从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表示错误)。但这当然会使你的应用程序平台依赖。



 类似资料:
  • 问题内容: 我需要制作一个从用户获取以下内容的脚本: 1)进程名称(在Linux上)。 2)此进程写入的日志文件名。 它需要终止该进程并确认该进程已关闭。将日志文件名更改为带有时间和日期的新文件名。然后再次运行该过程,确认它已启动,以便继续写入日志文件。 先谢谢您的帮助。 问题答案: 您可以使用以下命令检索给定名称的进程ID(PID): 希望这可以帮助

  • 问题内容: 我正在使用popen()打开一个长期运行的过程。对于调试,我想在完成之前终止该过程。调用pclose()只会阻塞直到子项完成。 我如何杀死这个过程?我没有找到任何简单的方法来从popen()返回的资源中获取pid,以便可以向其发送信号。 我想我可以做些杂乱的事情,并尝试使用某种命令行黑客将pid混入输出中… 问题答案: 好了,找到了一个解决方案:我改回而不是。然后就这么简单:

  • 问题内容: 在Linux中,当我在java.lang.Process对象上运行destroy函数(类型为true的java.lang.UNIXProcess)时,它会发送SIGTERM信号进行处理,有没有办法用SIGKILL杀死它? 问题答案: 不使用纯Java。 你最简单的选择是使用运行的外部进程的命令。 不幸的是,掌握PID并不是那么简单。您将需要使用反射黑魔法来访问该字段,或者弄乱该命令的输

  • 问题内容: 在Linux中,当我在java.lang.Process对象上运行destroy函数(类型为true的java.lang.UNIXProcess)时,它会发送SIGTERM信号进行处理,有没有办法用SIGKILL杀死它? 问题答案: 不使用纯Java。 你最简单的选择是使用运行的外部进程的命令。 不幸的是,掌握PID并不是那么简单。您将需要使用反射黑魔法来访问该字段,或者弄乱该命令的输

  • 错误: 内存不足,Java运行时环境无法继续。本机内存分配(mmap)无法映射71827456字节以提交保留内存。可能的原因:系统在32位模式下没有物理RAM或交换空间,遇到了进程大小限制。可能的解决方案:减少系统上的内存负载增加物理内存或交换空间检查交换备份存储是否已满在64位OS上使用64位Java减少Java堆大小(-xmx/-xms)减少Java线程数量减少Java线程堆栈大小(-xs)设

  • 我得到了一个用java编写的应用程序,它在Unix上运行,并在启动时启动两个子进程(via)。如果应用程序因某种原因崩溃,子进程不会被杀死。 现在,我添加了一个关闭钩子,每次崩溃都会触发它,到目前为止还可以。但是我想在UNIX控制台上为应用程序的每个子进程发送一个SIGTERM信号(或至少SIGINT)。我应该能够通过找到他们的进程ID,但是我没有正确提取PID并为每个进程发送信号。 有人能帮忙吗