【问题标题】:Java Process Builder, program process starts but the program does not use CPU or MemoryJava Process Builder,程序进程启动但程序不使用CPU或内存
【发布时间】:2014-12-11 05:41:20
【问题描述】:

您好,在此先感谢您, 我有以下问题:我有一个 GUI 和一个按钮,我需要在同一台机器上启动一个 c++ 程序。该程序使用称为 SSM(类似 ROS)的特定框架来共享数据。 从终端启动程序本身运行良好,但是当我使用 java process builder 启动它时,我无法访问任何数据,但我仍然可以看到进程正在运行。

我使用的是 Ubuntu 14.04 和 OpenJDK7。我正在使用的代码如下(根据评论更新):

ProcessBuilder builder = new ProcessBuilder(command);
builder.redirectOutput(Redirect.INHERIT);
builder.redirectError(Redirect.INHERIT);    
builder.start();

其中命令来自我通过 UDP 接收的一些数据:

command[0] = Main_gui.getHomePath()+"PFforAEV_autoCalib_20140418/PFforAEV0.2.2";
command[1] = String.valueOf(initialPosition[0]);
command[2] = String.valueOf(initialPosition[1]);
command[3] = String.valueOf(initialPosition[2]);
command[4] = "walllandmark_F41_20130125";

更具体地说,进程 PFforAEV0.2.2 在那里,正在运行,但它似乎不使用任何 CPU 或内存。我无法通过框架访问数据。看起来如果它只是挂起。

如果您需要更多详细信息,请询问。

有人可以帮助我吗? 谢谢。

【问题讨论】:

标签: java ubuntu terminal processbuilder


【解决方案1】:

你必须从子进程的stdout和stderr的InputStream中读取,或者将它们重定向到父进程的流中:

ProcessBuilder builder = new ProcessBuilder(command);
builder.redirectOutput(Redirect.INHERIT);
builder.redirectError(Redirect.INHERIT);
builder.start();

看到这个example

【讨论】:

  • 我尝试了您的解决方案,但它不起作用。仍然没有 CPU 也没有信息,如果我没有错误地按照您的建议重定向输出和错误,只需让我的进程的输出转到父进程对吗?在那种情况下,我是否需要做任何其他事情来管理输出并且不会卡住(顺便说一句,我不关心输出)?
  • 我做了什么,现在用文本文件中的输出(如您的链接所建议的那样)它正在工作。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-20
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 1970-01-01
  • 2015-12-17
相关资源
最近更新 更多