为什么可以';“我发送”;“钥匙”;从java启动的to oclHashcat进程

为什么可以';“我发送”;“钥匙”;从java启动的to oclHashcat进程,java,process,processbuilder,Java,Process,Processbuilder,我有一个简单的Java程序,它启动oclHashcat(实际上是cudaHashcat)进程,并尝试与启动的进程通信。 读取进程的输出效果很好,但是我似乎无法写入进程 演示代码,显示我正在尝试做什么:(在程序中按s应该显示当前操作的状态,但是什么也没有发生 public class CudaHashcat { public static void main(String[] args) throws IOException { ProcessBuilder builder = new P

我有一个简单的Java程序,它启动oclHashcat(实际上是cudaHashcat)进程,并尝试与启动的进程通信。 读取进程的输出效果很好,但是我似乎无法写入进程

演示代码,显示我正在尝试做什么:(在程序中按s应该显示当前操作的状态,但是什么也没有发生

public class CudaHashcat {
public static void main(String[] args) throws IOException {
    ProcessBuilder builder = new ProcessBuilder("cudaHashcat64.exe", "-m", "0", "-b");
    builder.redirectErrorStream(true);
    builder.redirectInput(Redirect.PIPE);
    builder.redirectOutput(Redirect.INHERIT);
    final Process process = builder.start();
    new Thread() {
        @Override
        public void run() {
            try {
                Thread.sleep(2000);
                System.out.println("Writing to hashcat process"); // this shows up just fine
                process.getOutputStream().write('s');
                process.getOutputStream().flush();
            } catch (InterruptedException | IOException e) {
                e.printStackTrace();
            }
        };
    }.start();
}
}

谢谢你的帮助!

你确定只有
s
而不是
s
后面跟着换行吗?
。write()
不会为你写换行是的,我是,在命令行上只需按“s”就行了。还要写一个“\n”在s没有改变行为之后,好的,那么你确定进程真的侦听了stdin吗?它没有检查stdin是否是某种类型的“tty”,并且在这种情况下不接受输入吗?我不知道如何在Windows上判断,尽管我不确定。程序检查tty是有意义的(有一个Linux版本的oclHashcat,我可以检查一下这是怎么回事吗?)。然后我的问题可能需要是“我可以让我的Java程序看起来像启动进程的tty,向它发送密钥吗?”。