1

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

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

任何人都可以帮忙吗?

非常感谢你!

4

1 回答 1

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。

于 2012-04-07T12:34:21.617 回答