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