如何在不终止 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/*
干杯。
我想在应用程序中启动一个 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/*
干杯。