我正在尝试使用java运行unix可执行文件。
我有一个可供数千名用户访问的用户界面。 可执行文件可以通过按钮触发。
我看了几个例子: Java Programming: call an exe from Java and passing parameters
使用建议的方法有哪些瓶颈?
例如,如果用户单击按钮并运行可执行文件,是否会影响第二个用户的性能?
或者,如果他们同时按下按钮,会发生什么?
或者我怎么知道执行是否完成(我不认为操作系统会为我管理)。
答案 0 :(得分:1)
使用建议的方法有哪些瓶颈?
最大的问题是您的硬件和可执行文件本身。如果可执行文件在一段时间后自行完成,那么你应该没问题。您不希望1000个进程等待某些事情完成。您还需要在进程启动后监视这些进程,并在进程超时时将其终止。另一个考虑因素是限制每个用户的并发进程数。
例如,如果用户单击按钮并运行可执行文件,是否会影响第二个用户的性能?
不直接。见上文。
或者,如果他们同时按下按钮,会发生什么?
如果每次都在新线程(或任务调度程序)上启动进程,则不执行任何操作。每次按下按钮,都会启动一个新进程。
或者我怎么知道执行是否完成(我不认为操作系统会为我管理)。
以下是一个例子:
String command = "PATH_TO_EXECUTABLE/EXECUTABLE PARAMS ";
log.info("Executing command - " + command);
// Executing the command
Process process;
ArrayList<String> outLines = new ArrayList<String>();
try {
process = Runtime.getRuntime().exec(command);
// Getting the results
process.getOutputStream().close();
String line;
log.info("Standard Output:");
BufferedReader stdout = new BufferedReader(new InputStreamReader(
process.getInputStream()));
while ((line = stdout.readLine()) != null) {
log.info(line);
outLines.add(line);
}
stdout.close();
log.info("Standard Error:");
BufferedReader stderr = new BufferedReader(new InputStreamReader(
process.getErrorStream()));
while ((line = stderr.readLine()) != null) {
log.info(line);
}
stderr.close();
log.info("Done");
} catch (IOException e) {
log.error("Error while exceuting command", e);
}
String result = outLines.get(outLines.size()-1);
//TODO do something with the results
//at this point the process has finished executing