【发布时间】:2012-09-27 06:40:33
【问题描述】:
当我没有启动的进程结束时如何通知我,这是他们恢复其退出代码和/或输出的一种方式?进行监视的进程将以 root/管理员身份运行。
【问题讨论】:
当我没有启动的进程结束时如何通知我,这是他们恢复其退出代码和/或输出的一种方式?进行监视的进程将以 root/管理员身份运行。
【问题讨论】:
您可以通过调用列出所有当前进程并解析输出的 shell 命令来检查进程当前是否正在从 java 运行。在linux/unix/mac os下命令是ps,在windows下是tasklist。
对于 ps 版本,您需要执行以下操作:
ProcessBuilder pb = new ProcessBuilder("ps", "-A");
Process p = pb.start();
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
// Skip first (header) line: " PID TTY TIME CMD"
in.readLine();
// Extract process IDs from lines of output
// e.g. " 146 ? 00:03:45 pdflush"
List<String> runningProcessIds = new ArrayList<String>();
for (String line = in.readLine(); line != null; line = in.readLine()) {
runningProcessIds.add(line.trim().split("\\s+")[0]);
}
我不知道有什么方法可以捕获退出代码或输出。
【讨论】:
否(至少在 Unix/Windows 上不是)。您必须是 父 进程并生成它才能收集返回码和输出。
【讨论】:
你可以种这样做。在 Unix 上,您可以编写一个脚本来不断地 grep 正在运行的进程列表,并在您正在搜索的进程不再找到时通知您。
这是伪代码,但你可以这样做:
while ( true ) {
str = ps -Alh | grep "process_name"
if ( str == '' ) {
break
}
wait(5 seconds)
}
raise_alert("Alert!")
检查 ps 的手册页。您的选择可能会有所不同。这些是我在 Mac OSX10.4 上使用的。
【讨论】:
看起来您可以使用 jna 绑定到等待 pid 结束的“C”方式(在 Windows 中,轮询 OpenProcess(PROCESS_QUERY_INFORMATION ...) 以查看它何时将进程报告为已死,请参阅 ruby 的 win32。 c
【讨论】: