有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

通过ProcessBuilder的java(阻塞)交互式shell

我构建了一个交互式的EXE,这意味着你可以不断地向它发送新命令,它会处理它们

根据this答案,可以在Java中实现自动化。但是,在发送命令时,代码不会等待命令完成。相反,它会立即将控件返回给调用者,这可能会导致race conditions:如果sent命令应该写入一个文件,那么在访问之前可能还没有创建该文件。如何发送命令、读取输出,以及一旦再次需要某个输入命令,sendCommand()调用就会返回

public synchronized void sendCommand(String command) throws IOException
{
    byte[] commandBytes = (command + "\n").getBytes(UTF_8.name());
    outputStream.write(commandBytes);
    outputStream.flush();
}

最好同时返回过程输出。这将是非交互式shell命令的默认行为,该命令在执行完成后终止^{}无限期地阻塞,直到进程终止,我不想硬编码预期进程输出的长度或类似的攻击来绕过这个缺点


共 (1) 个答案

  1. # 1 楼答案

    我决定重新编写二进制文件,使其不再具有交互功能。事实证明,预期的性能增益可以忽略不计,因此没有更多的理由让它保持交互,并经历更大的实现麻烦