我得到了一个用java编写的应用程序,该应用程序在Unix上运行并在启动时启动两个子进程(通过Runtime.getRuntime().exec()
)。如果应用程序由于某种原因崩溃,子进程将不会被杀死。
现在,我添加了一个关闭钩子,它会在每次崩溃时被触发,到目前为止还可以。但是我想在UNIX控制台上为应用程序的每个子进程发送一个SIGTERM信号(或至少是SIGINT)。我应该能够通过ps
找到他们的进程ID,但我没有让它正确提取PID并为每个进程发送一个信号。
有人可以帮忙吗?
非常感谢!
答案 0 :(得分:2)
我建议它不是官方功能,而是技巧。
这是我获取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。