Java:杀死unix上的所有子进程

时间:2012-04-07 06:39:10

标签: java unix runtime sigterm

我得到了一个用java编写的应用程序,该应用程序在Unix上运行并在启动时启动两个子进程(通过Runtime.getRuntime().exec())。如果应用程序由于某种原因崩溃,子进程将不会被杀死。

现在,我添加了一个关闭钩子,它会在每次崩溃时被触发,到目前为止还可以。但是我想在UNIX控制台上为应用程序的每个子进程发送一个SIGTERM信号(或至少是SIGINT)。我应该能够通过ps找到他们的进程ID,但我没有让它正确提取PID并为每个进程发送一个信号。

有人可以帮忙吗?

非常感谢!

1 个答案:

答案 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。