【问题标题】:How can launch an external process from java and still be able to interact with this process?如何从 java 启动外部进程并仍然能够与该进程交互?
【发布时间】:2015-06-08 15:32:47
【问题描述】:

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

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

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

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

感谢您的帮助!

【问题讨论】:

    标签: java shell process java-io xterm


    【解决方案1】:

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

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

    【讨论】:

    • 我试过这个选项,但我可以让它工作。当我发送 ctlrC. (另一个stackoverflow帖子说这不容易)。无论如何,这是一个不错的选择。我会继续寻找其他东西。
    猜你喜欢
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多