如何等待进程以java或clojure结束

时间:2010-02-07 19:47:48

标签: java clojure

如果我没有开始的流程结束并且是他们恢复退出代码和/或输出的方法,我如何得到通知?进行观看的过程将以root / administrator身份运行。

4 个答案:

答案 0 :(得分:2)

您可以通过调用列出所有当前进程并解析输出的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]);
}

我不知道您可以捕获退出代码或输出的任何方式。

答案 1 :(得分:1)

否(至少在Unix / Windows上)。您必须是进程并将其生成以收集返回代码和输出。

答案 2 :(得分:0)

你可以那种这样做。在Unix上,您可以编写一个脚本来持续grep正在运行的进程列表,并在找不到您正在搜索的进程时通知您。

这是伪代码,但您可以这样做:

while ( true ) {
    str = ps -Alh | grep "process_name"
    if ( str == '' ) {
        break
    }
    wait(5 seconds)
}
raise_alert("Alert!")

查看ps的手册页。您的选择可能会有所不同。这些是我在Mac OSX10.4上使用的那些。

答案 3 :(得分:0)

看起来你可以使用jna绑定等待pid结束的“C”方式(在windows中,轮询OpenProcess(PROCESS_QUERY_INFORMATION ...)以查看它何时报告该进程已死,请参阅ruby的win32。 ç