当父进程退出时,如何使子进程退出?
我正在使用 ProcessBuilder 启动一个子进程,如果父进程退出,则需要子进程退出。在正常情况下,我的代码会正确地停止孩子。但是,如果我导致操作系统杀死父级,则子级将继续运行。
有没有办法将子进程“绑定”到父进程,以便在父进程被杀死时退出?
类似问题:
我正在使用 ProcessBuilder 启动一个子进程,如果父进程退出,则需要子进程退出。在正常情况下,我的代码会正确地停止孩子。但是,如果我导致操作系统杀死父级,则子级将继续运行。
有没有办法将子进程“绑定”到父进程,以便在父进程被杀死时退出?
类似问题:
虽然您无法防止硬中止(例如Unix上的SIGKILL),但您可以防止导致父进程关闭的其他信号(例如SIGINT)并清理子进程。您可以通过使用关闭钩子来实现此目的:请参阅 Runtime#addShutdownHook,以及此处的相关 SO 问题。
您的代码可能如下所示:
String[] command;
final Process childProcess = new ProcessBuilder(command).start();
Thread closeChildThread = new Thread() {
public void run() {
childProcess.destroy();
}
};
Runtime.getRuntime().addShutdownHook(closeChildThread);
子进程与其父进程之间没有联系。他们可能知道彼此的进程ID,但他们之间没有硬联系。你说的是一个孤儿进程。这是一个操作系统级别的问题。这意味着任何解决方案都可能依赖于平台。
我唯一能想到的就是让孩子定期检查其父母状态,如果父母关门,则退出。不过,我不认为这会那么可靠。