如何从java启动外部进程并仍然能够与此进程交互?

时间:2015-06-08 15:32:47

标签: java shell process java-io xterm

我的应用程序应启动外部程序以开始录制桌面。 我正在使用一个简单的程序:recordmydesktop。 使用ProcessBuilder启动程序可以正常工作。

我的主要问题是我必须停止录制。但我再也无法访问该程序了。

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

然后,我想找到:我怎么能不使用xterm并且仍然可以停止录制过程?例如:发送停止信号(Ctrl C)到进程。< / p>

以下是一些示例代码:

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打开而不是两个。我创建了一个不应该发生的循环。这与我的问题无关,但如果有人知道我很想知道原因的原因。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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

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