如何在不终止 InputStream 的情况下终止或暂停进程?

How to kill or pause a process without killing its InputStream?

我想在应用程序中启动一个 getevent 进程,方法是:

Process get_event_process = Runtime.getRuntime().exec("getevent");

并使用 BufferedReader:

获取其输出
BufferedReader buffered_reader = new BufferedReader
      (new InputStreamReader(get_event_process.getInputStream()));

String line = "";
log = new StringBuilder();
while((line = buffered_reader.readLine()) != null) {
     log.append(line);
}

主要问题是 getevent 进程将永远不会结束,除非它被终止。如果我终止进程,我将失去我的 InputStream 本身。

有没有办法中断、暂停进程,并在此之前获取生成的输入?

或者有没有办法保存像 sh -c getevent 这样永无止境的进程的输入,即使我终止了进程?

好的,我找到了使用 ProcessBuilder 而不是 Process 的解决方案。

ProcessBuilder builder = new ProcessBuilder().command("getevent").redirectErrorStream(true);
Process get_event_process = builder.start();

不幸的是,它会卡在 while 循环中并给出如下输出:

/dev/input/event5  Permission denied.
/dev/input/event4  Permission denied.
/dev/input/event3  Permission denied.
/dev/input/event2  Permission denied.
/dev/input/event1  Permission denied.
/dev/input/event0  Permission denied.

因此,对于有根 phone 的用户,您可以使用以下方法获取输出:

chmod 666 /dev/input/*

干杯。