【发布时间】:2012-04-20 14:19:21
【问题描述】:
我有一个用 java 编写的应用程序,它在 Unix 上运行并在启动时启动两个子进程(通过Runtime.getRuntime().exec())。如果应用程序由于某种原因崩溃,子进程不会被杀死。
现在,我添加了一个关闭挂钩,它会在每次崩溃时触发,到目前为止还可以。但我想在 UNIX 控制台上为应用程序的每个子进程发送一个 SIGTERM 信号(或至少是 SIGINT)。我应该可以通过ps 找到他们的进程 ID,但我没有正确提取 PID 并为每个进程发送信号。
谁能帮忙?
非常感谢!
【问题讨论】:
-
我不确定,但可以在 shell 脚本中执行您想要的操作,即通过提供 PID 来查找进程,然后在 shell 脚本本身中将其杀死。在 java 中调用这个脚本。
-
如果您的应用程序具有特定名称,则 pkill 可以使用该名称。
-
另一个存根可能在这里[1] blog.igorminar.com/2007/03/…
-
应用程序没有特定的名称,进程只是命名为“java”。但是如果获取进程 ID,我怎样才能杀死所有子进程(然后在 shell 脚本中)?
-
关闭挂钩在哪里运行?如果是在 Java 中,那么您是否尝试保存
Process对象并在它们上调用destroy?