Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中运行可执行文件的陷阱_Java - Fatal编程技术网

Java中运行可执行文件的陷阱

Java中运行可执行文件的陷阱,java,Java,我正在尝试使用java运行unix可执行文件 我有一个用户界面,可以被成千上万的用户访问。 可执行文件可以通过按钮触发 我看了几个例子: 使用建议方法的瓶颈是什么 例如,如果用户单击按钮并运行可执行文件,这会影响第二个用户的性能吗 或者如果他们同时按下按钮,会发生什么 或者我如何知道执行是否完成(我认为操作系统不会为我管理) 使用建议方法的瓶颈是什么 最大的问题是你的硬件和可执行文件本身。如果可执行文件在一段时间后自行完成,您应该可以。您不希望有1000个进程等待完成某些任务。您还需要在进程启

我正在尝试使用java运行unix可执行文件

我有一个用户界面,可以被成千上万的用户访问。 可执行文件可以通过按钮触发

我看了几个例子:

使用建议方法的瓶颈是什么

例如,如果用户单击按钮并运行可执行文件,这会影响第二个用户的性能吗

或者如果他们同时按下按钮,会发生什么

或者我如何知道执行是否完成(我认为操作系统不会为我管理)

使用建议方法的瓶颈是什么


最大的问题是你的硬件和可执行文件本身。如果可执行文件在一段时间后自行完成,您应该可以。您不希望有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
String命令=“路径到可执行文件/可执行参数”;
log.info(“执行命令-”+命令);
//执行命令
工艺过程;
ArrayList outLines=新的ArrayList();
试一试{
process=Runtime.getRuntime().exec(命令);
//获得结果
process.getOutputStream().close();
弦线;
log.info(“标准输出:”);
BufferedReader标准输出=新的BufferedReader(新的InputStreamReader(
process.getInputStream());
而((line=stdout.readLine())!=null){
日志信息(行);
大纲。添加(行);
}
stdout.close();
log.info(“标准错误:”);
BufferedReader stderr=新的BufferedReader(新的InputStreamReader(
process.getErrorStream());
而((line=stderr.readLine())!=null){
日志信息(行);
}
stderr.close();
日志信息(“完成”);
}捕获(IOE异常){
log.error(“执行命令时出错”,e);
}
字符串结果=outLines.get(outLines.size()-1);
//对结果做些什么
//此时,流程已完成执行

只需尝试并分析行为。创建线程并跟踪外部进程的状态。似乎在实现如何运行可执行文件之前,您需要同步对按钮的访问。在考虑性能问题之前,您需要考虑程序的准确性。“您还需要在进程启动后监视它们,并在它们达到超时时终止它们。”我该如何确切地做到这一点?我应该编写一个不同的应用程序来监视它吗?或者我应该试着让第三方应用程序监视某个特定的进程并在某个时间后将其终止?您可以查看此示例并将一些功能合并到我的中。