如何从java启动一个外部进程,并且仍然能够与这个进程交互?

如何从java启动一个外部进程,并且仍然能够与这个进程交互?,java,shell,process,java-io,xterm,Java,Shell,Process,Java Io,Xterm,我的应用程序应该启动一个外部程序来开始录制桌面。 我正在使用一个简单的程序:recordmydesktop。 使用ProcessBuilder启动程序效果良好 我的主要问题是我必须停止录音。但是我再也不能使用这个程序了 我的第一个想法是从java启动一个终端:bash并没有保持打开状态,但xterm工作正常。首先,我想知道为什么bashshell保持打开状态 然后,我想找到:我怎么能不使用xterm而仍然能够停止录制进程呢?例如:向进程发送停止信号(Ctrl C) 以下是一些示例代码: impo

我的应用程序应该启动一个外部程序来开始录制桌面。 我正在使用一个简单的程序:recordmydesktop。 使用ProcessBuilder启动程序效果良好

我的主要问题是我必须停止录音。但是我再也不能使用这个程序了

我的第一个想法是从java启动一个终端:bash并没有保持打开状态,但xterm工作正常。首先,我想知道为什么bashshell保持打开状态

然后,我想找到:我怎么能不使用xterm而仍然能够停止录制进程呢?例如:向进程发送停止信号(Ctrl C)

以下是一些示例代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class hh {

public static void main(String[] args) {
    try {
        Process process = new ProcessBuilder(new String[]{"/usr/bin/xterm" ,"recordmydesktop"}).start();
        InputStream processIS = process.getInputStream();
        InputStreamReader processISR = new InputStreamReader(processIS);
        BufferedReader processBR = new BufferedReader(processISR);
        String line;
        System.out.println("Output of the record process is: ");

        while ((line=processBR.readLine())!=null){
            System.out.print(line);
        }
        }
    catch (IOException e) {
        e.printStackTrace();
    }
}
}
此外,在这段代码中,我无法获得任何行返回。所以我的程序不知道recordmydesktop是否正常

Ps:如果您启动:

Process process = new ProcessBuilder(new String[]{"/usr/bin/xterm" ,"xterm"}).start();
许多xterm打开,而不是两个。我创建了一个不应该发生的循环。这与我的问题无关,但如果有人知道原因,我很想知道原因


谢谢你的帮助

您可以通过输出流向进程发送命令

Process process ;
String command = "some command" ;
process.getOutputStream().writeBytes( command.getBytes() ) ;

我尝试过这个选择,但我可以让它工作。当我发送ctlrC时,程序的行为不符合要求。(另一个帖子说这不容易做到)。无论如何,谢谢。这是一个很好的选择。我会继续找别的东西。