gpt4 book ai didi

java - 在 Linux 中通过 OutputStreamWriter Ctrl C

转载 作者:太空宇宙 更新时间:2023-11-04 09:55:14 25 4
gpt4 key购买 nike

我有一个在 Java 上通过进程运行时运行的 shell 脚本。此 Shell 脚本仅在您按下 CTRL+C 时停止现在我从 JTextArea 中的脚本捕获 InputStream。但我无法发送 CTRL+C

当您在 Shell Konsole 上运行 CTRL+C 时,脚本会停止并发回信息。而这个信息是我无法捕捉到的信息。

所以如何通过进程运行时发送 CTRL+C?如何从 CTRL+C 捕获输入流?

File dirw = new File("/home/mydir/sh/");
Runtime runtime = Runtime.getRuntime();
Process process = null;
process = runtime.exec("./start_test.sh", null, dirw);

OutputStream outp = new OutputStream(process.getOutputStream());
InputStreamReader isr = new InputStreamReader(process.getInputStream());
BufferedReader br = new BufferedReader(isr);
String line = null;

int cont = 1;
while ((line = br.readLine()) != null) {
jtextarea.append("LineOK " + line + "\n");
if( cont == 10) {
outp.write(3); //sending Ctrl+C
outp.flush();
cont =0;
}
cont ++;
}

最佳答案

CTRL+C 是从用户发送到 shell 的命令。当 shell 接收到它时,它将 SIGINT 发送到前台进程。

要在 Java 中执行此操作,请使用 Process.sendSignal(pid, Process.SIGNAL_QUIT) - 这仅适用于 Android。

更新:上面的命令是错误的,因为它只适用于 Android。

正确的方法是发送kill -2 pid。当心:这是仅限 UNIX 的解决方案。另一个问题是获取 pid(进程 ID)。事实证明,没有与操作系统无关的解决方案:How to get PID of process I've just started within java program?

解决方案是求助于链接中提到的依赖于操作系统的 hack(通过反射从 Process 获取 pid)。

关于java - 在 Linux 中通过 OutputStreamWriter Ctrl C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5860301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com