Unix可执行文件无法在MAC OSX中执行 我有一个用C++编写的控制台应用程序(使用Boost库),并用XCODEL编译,这个UNIX可执行文件与守护进程通信并执行特定任务。 当我使用所有参数从命令行运行这个控制台应用程序时,它工作得非常好。 但当我从Java代码调用这个控制台应用程序时,它并没有执行。 我正在使用ProcessBuilder执行它。我能够使用相同的代码执行与系统相关的命令。我使用的控制台应用程序依赖于静态库

Unix可执行文件无法在MAC OSX中执行 我有一个用C++编写的控制台应用程序(使用Boost库),并用XCODEL编译,这个UNIX可执行文件与守护进程通信并执行特定任务。 当我使用所有参数从命令行运行这个控制台应用程序时,它工作得非常好。 但当我从Java代码调用这个控制台应用程序时,它并没有执行。 我正在使用ProcessBuilder执行它。我能够使用相同的代码执行与系统相关的命令。我使用的控制台应用程序依赖于静态库,java,macos,terminal,processbuilder,Java,Macos,Terminal,Processbuilder,以下是规范使用的am: Jdk-1.7, MacOSX-10.7.5, XCode-4.6.2, 增强版-1.53.0 我使用的代码: String str[] = {"/bin/sh", "-c" ,"/Users/user/Downloads/cppapplication_1"}; ProcessBuilder builder = new ProcessBuilder(str); builder.directory(new File("/Users/use

以下是规范使用的am: Jdk-1.7, MacOSX-10.7.5, XCode-4.6.2, 增强版-1.53.0

我使用的代码:

String str[] = {"/bin/sh", "-c" ,"/Users/user/Downloads/cppapplication_1"};
           ProcessBuilder builder = new ProcessBuilder(str);
       builder.directory(new File("/Users/user/Downloads/")); 
        final Process process = builder.start();
        process.waitFor();
        InputStream is = process.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
它没有抛出任何错误。这是绞刑


非常感谢您的帮助。

另一种选择是使用
开放系统调用

您可以使用
stringstr[]={”/bin/sh“,“-c”,“open-a终端/Users/user/Downloads/cppplication_1”}

我不知道它为什么能与
开放系统调用一起工作的确切原因,当我也面临同样的问题时,第三方unix可执行文件在命令行中工作正常,但在java代码中却不能。当从java代码调用时,进程并没有终止,也并没有向stout生成任何输出。
那次
开放系统调用
对我来说很有效,唯一的问题是它启动了一个新的终端窗口。我使用
osascript-e'tell application“System Events”来管理它,以将进程“Terminal”的可视性设置为false'
来隐藏终端窗口。

试试看


这肯定会对您有所帮助。

我知道这是一个老问题,但我在osX上的unix可执行文件上遇到了完全相同的问题。让我拔了一头漂亮的头发

最后,这对我起了作用:

*

    proc = builder.start();
    OutputStream out = proc.getOutputStream();
    out.close(); //This part is the key


     BufferedReader bufferReader = new BufferedReader(new          InputStreamReader(proc.getInputStream()));
    //proceed to read from the buffered reader etc.
*

如上所述,我必须手动关闭outputstream。似乎outputStream正在等待某种输入,而实际上没有输入


因此,在我的例子中,关闭outputstream成功了,exec现在正在按预期工作。任何关于进程为什么在没有输入的情况下等待输入(无法识别的EOL?)的输入都会很有帮助。

您使用的确切命令是什么?有关如何使用Process Builder的示例代码。你有什么例外?考虑到我们自己无法实际运行该命令,您必须提供更多关于您的问题的信息,以便远程帮助您。请确保使用错误流。