为什么可以';“我发送”;“钥匙”;从java启动的to oclHashcat进程
我有一个简单的Java程序,它启动oclHashcat(实际上是cudaHashcat)进程,并尝试与启动的进程通信。 读取进程的输出效果很好,但是我似乎无法写入进程 演示代码,显示我正在尝试做什么:(在程序中按s应该显示当前操作的状态,但是什么也没有发生为什么可以';“我发送”;“钥匙”;从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
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,向它发送密钥吗?”。