Java可以直接调用Linux命令,形式如下:   
  Runtime.getRuntime().exec(command)     
    
  举例:运行ls,top命令可以这样:   
    Runtime.getRuntime().exec("ls");   
    
    但是这样执行时没有任何输出,原因:     
        调用Runtime.exec方法将产生一个本地的进程,并返回一个Process子类的实例,   
  (注意:Runtime.getRuntime().exec(command)返回的是一个Process类的实例),   
  该实例可用于控制进程或取得进程的相关信息.   由于调用Runtime.exec方法所创建的子进程没有自己的终端或控制台,因此该子进程的标准IO(如stdin,stdou,stderr)都通过Process.getOutputStream(),Process.getInputStream(),   Process.getErrorStream()方法重定向给它的父进程了.用户需要用这些stream来向   子进程输入数据或获取子进程的输出.   可以采用如下方法:     
    
  ***************************************************************************现在遇到一个问题,写了一个程序,调用top命令,并把输出结果打印出来,如下   
  try   
  {   
    Process   process   =   Runtime.getRuntime().exec   ("top   -n   1");   //   表示只执行一次就自动退出,   
    InputStreamReader   ir=newInputStreamReader(process.getInputStream());   
    LineNumberReader   input   =   new   LineNumberReader   (ir);   
    
    String   line;   
    while   ((line   =   input.readLine   ())   !=   null){   
      System.out.println(line);       
  }   
  catch   (java.io.IOException   e){   
    System.err.println   ("IOException   "   +   e.getMessage());   
  }     
  可是结果并不乐观,input.readLine   ())总是为空,读不到,   
  我把Runtime.getRuntime().exec   ("ls");   是可以正常打印出列表信息的,top就不行,   
  请问大家这个是怎么回事?我该如何实现? 

解决方案 »

  1.   

    个人觉得是否可以尝试用  top -n 1 >aaa.txt
    这样的方式做?
      

  2.   

    top -n 1 >aaa.txt
    也用过,调用top线程,不能正常返回!
     Process pos = Runtime.getRuntime().exec(cmd);
     pos.waitFor();
     if (pos.exitValue() == 0) //不为0啊,导致输出信息重定向到文件不成功!
    ···········
      

  3.   

    我记得LINUX下面,设备也是有文件名称的,是否能尝试直接重定向到设备的文件上?