Java Linux中通过OutputStreamWriter控制C

Java Linux中通过OutputStreamWriter控制C,java,linux,netbeans-6.9,Java,Linux,Netbeans 6.9,我有一个shell脚本,它在Java上通过一个进程运行时运行。 此Shell脚本仅在按下CTRL+C时停止 现在,我从JTextArea中的脚本捕获InputStream。 但是我不能发送CTRL+C 在Shell Konsole上运行CTRL+C时,脚本将停止并发回信息。 这个信息是我抓不到的 所以 如何通过流程运行时发送CTRL+C? 如何从CTRL+C捕获Inputstream CTRL+C是从用户发送到shell的命令。当shell接收到它时,它向前台进程发送SIGINT 要在Java中

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

在Shell Konsole上运行CTRL+C时,脚本将停止并发回信息。 这个信息是我抓不到的

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

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

要在Java中实现这一点,请使用-这仅适用于Android

更新:上述命令错误,因为它仅在Android上可用

正确的方法是发送
kill-2PID
。注意:这是唯一的UNIX解决方案。另一个问题是获取
pid
(进程id)。事实证明,没有操作系统不可知的解决方案:


解决方案是使用链接中提到的依赖操作系统的黑客(通过反射从进程中获取pid)。

对于其中一个,您正在编写字符“3”,而不是控制代码。我正在使用串行端口,进程没有sendsignal方法。我尝试按照您的建议执行,但没有效果。我找到了进程Id。但是当我想要终止它(键入kill-SIGINT PID)时,konsole框架上没有发生任何事情,我仍然收到信息,好像我仍然在运行程序,但在进程表(KsysGuard)上它确实终止了它。我也尝试了不同的信号,但得到了相同的结果。正如我之前在Konsole上告诉过你的,当你点击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 ++;
}