我得到了一个用java编写的应用程序,它在Unix上运行,并在启动时启动两个子进程(viaRuntime.getRuntime(). exec()
)。如果应用程序因某种原因崩溃,子进程不会被杀死。
现在,我添加了一个关闭钩子,每次崩溃都会触发它,到目前为止还可以。但是我想在UNIX控制台上为应用程序的每个子进程发送一个SIGTERM信号(或至少SIGINT)。我应该能够通过ps
找到他们的进程ID,但是我没有正确提取PID并为每个进程发送信号。
有人能帮忙吗?
非常感谢你!
我想说的不是一个官方功能,而是一个技巧。
这就是我为我的java应用程序获取进程ID的方式。我从未找到其他方法。
public static final String getPid() {
try {
RuntimeMXBean runtimeBean = ManagementFactory.getRuntimeMXBean();
String name = runtimeBean.getName();
int k = name.indexOf('@');
if (k > 0)
return name.substring(0, k);
} catch (Exception ex) {
}
return null;
}
这适用于win、mac和linux。
问题内容: 我有一个运行bash脚本的詹金斯工作。 在bash脚本中,我有效地执行了两个操作,例如 但是如果手动中止了作业,则该作业仍然有效(如节点计算机上的a所示)。我无法使用陷印等等,因为如果jenkins发送信号(陷印不适用于),那将不起作用。 如果可以将此作业配置为简单地杀死它产生的 所有 进程,那将是理想的,我该怎么做? 问题答案: 实际上,默认情况下,Jenkins具有一个名为 Pro
问题内容: 我正在python中使用subprocess模块运行一些shell脚本。如果shell脚本运行时间很长,我想杀死该子进程。我认为如果将其传递给我的陈述就足够了。 这是代码: 我已经用一些运行120秒的shell脚本测试了此调用。我期望子进程在30秒后被杀死,但是实际上该进程正在完成120秒脚本,然后引发了Timeout Exception。现在的问题是如何通过超时杀死子进程? 问题
问题内容: 我有一个程序生成并与CPU繁重,不稳定的进程通信,而不是由我创建的。如果我的应用程序崩溃或被杀死,我也希望子进程也被杀死,因此用户不必跟踪它们并手动杀死它们。 我知道以前已经讨论过该主题,但是我已经尝试了所有描述的方法,但似乎没有一种方法能够经受住测试的考验。 我知道这是有可能的,因为终端一直在这样做。如果我在终端中运行某些程序并杀死该终端,则这些东西总是会死掉。 我试过了,双叉和。不
问题内容: 我想知道如何“杀死”已启动的过程。我知道Process API,但是不确定,是否可以使用它来杀死已经运行的进程,例如firefox.exe等。如果可以使用Process API,可以请您指向正确的方向?如果没有,还有哪些其他可用选项?谢谢。 问题答案: 如果你从Java应用程序中以从头开始处理(例如,通过调用或),那么你将对其具有有效的引用,并且可以在Process类中调用该方法以终止
问题内容: 我正在寻找一个Java工具/程序包/库,该工具可以强制杀死子进程。 该工具/软件包/库必须在Windows平台上运行(强制性)。需要对Linux / Unix的支持。 我的问题 我的Java代码创建了一个子进程,该子进程不会对杀死子进程的标准Java方法做出反应:process.destroy(),并且由于我没有子进程的源代码,因此我无法对其进行编程以更好地处理终止请求。 我尝试在调用
问题内容: 我有一个Java应用程序,用于准备操作系统命令并给我一个对象。(实际的os命令是使用cygwin在ssh上进行rsync的)。 这在Windows中运行良好,但是,如果我想停止使用它的进程将不会杀死子ssh和rsync进程……..我必须使用Windows任务管理器手动将其杀死。 是否有可能在我打电话之前以某种方式获取该进程的信息并发送ctrl-c ? 如果有人对解决方法有任何想法,那就