Runtime.exec与Process运行没结果是怎么回事儿呀?在XIAN等。

问题描述

下边是代码,晕死了,怎么回事儿呀,没有输出结果。我是在LINUX上运行的import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;public class test {public static void main(String[] args) {Process process=null;Runtime rt=Runtime.getRuntime();System.out.println("start");try {process=rt.exec("ps -aux|grep tomcat");InputStream is=null;InputStreamReader isr=null;BufferedReader buffer=null;String line=null;is=process.getInputStream();isr=new InputStreamReader(is);buffer=new BufferedReader(isr);while((line=buffer.readLine())!=null){System.out.println(line+"----------");}} catch (IOException e) {e.printStackTrace();}System.out.println("end");}}就27分,上了25,分不高,能解决了,有机会再给。 问题补充:nju_abc 写道

解决方案

Process代表一个进程,你只能使用一个命令,这种linux的命令管道你需要自己把前一个进程的输入写到后一个进程。上面的例子你需要建两个Process,这里有个例子:Piping between processes
解决方案二:
引用哦,那ps -aux|grep tomcat这个命令在LINUX上执行,他最终还是会分成两个命令的,是这意思吧。 本来是要按两个命令来执行的,但是经过Runtime.exec处理后,错误的变成了三个命令,这样执行肯定不行了。
解决方案三:
API使用的不对,你可以看看Runtime.exec调用的实现,它是把传入的参数以空格分割成多个命令,然后分别执行。这样的话,上面“ps -aux|grep tomcat”根本就不再是命令了
解决方案四:
试试看这样:先等待线程执行process.waitFor()然后执行下process.getOutputStream().flush();

时间: 2024-09-24 01:14:32

Runtime.exec与Process运行没结果是怎么回事儿呀?在XIAN等。的相关文章

c++-对C++头文件改变如增加一个变量或者随便打sdflksdjf对整个项目都没反应是怎么回事儿

问题描述 对C++头文件改变如增加一个变量或者随便打sdflksdjf对整个项目都没反应是怎么回事儿 对C++头文件改变如增加一个变量或者随便打sdflksdjf对整个项目都没反应是怎么回事儿 解决方案 你是怎么随便打的, 一般头文件里都是声明的, 也可以定义函数(定义的话就直接是内联函数了),如果随便打的话估计都让你编译不过去吧 解决方案二: 项目中没有任何一个cpp文件#include这个头文件,所以随便打什么都不会有反应. 解决方案三: 我就随便打了:sdkfjlskdjfl(在任何地方)

Java魔法堂:找外援的利器——Runtime.exec详解

一.前言  Java虽然五脏俱全但总有软肋,譬如获取CPU等硬件信息,当然我们可以通过JNI调用C/C++来获取,但对于对C/C++和Windows API不熟的码农是一系列复杂的学习和踩坑过程.那能不能通过简单一些.学习成本低一些的方式呢?答案是肯定的,在功能实现放在首位的情况下,借他山之石 是最简洁有力的做法.而 Runtime.exec方法 就为我们打开这么的一条路了.   二.认识 java.lang.Runtime.exec方法    作用:用于调用外部程序,并重定向外部程序的标准输入

java runtime.exec() 的编写详细介绍

那就首先说点Runtime类吧,他是一个与JVM运行时环境有关的类,这个类是Singleton的.我说几个自己觉得重要的地方. 1.Runtime.getRuntime()可以取得当前JVM的运行时环境,这也是在Java中唯一一个得到运行时环境的方法. 2.Runtime上其他大部分的方法都是实例方法,也就是说每次进行运行时调用时都要用到getRuntime方法. 3.Runtime中的exit方法是退出当前JVM的方法,估计也是唯一的一个吧,因为我看到System类中的exit实际上也是通过调

《Java安全编码标准》一2.8 IDS07-J不要向Runtime.exec()?方法传递非受信、未净化的数据

2.8 IDS07-J不要向Runtime.exec()?方法传递非受信.未净化的数据 外部程序通常被系统调用来完成某种需要的功能.这是一种重用的形式,也被认为是一种简单基于组件的软件工程方法.在应用没有净化非受信的输入并且在执行外部程序时使用这种数据,就会导致产生命令和参数注入漏洞. 每一个Java应用都有一个唯一的Runtime类的实例,通过它可以提供一个应用和应用运行环境的接口.当前的Runtime对象可以通过Runtime.getRuntime()方法获得.Runtime.getRunt

Runtime.exec()调用psexec去远程执行dos命令问题

问题描述 本地和远程系统都是winxp使用Runtime.exec(),如果执行本地dos命令,dir操作成功,能够全部输出完整dir的命令结果但是如果执行的是远程主机的命令,dir操作仍然成功,但在输出目录信息时,只能输出一部分.个人分析:psexec通过某个socket与远程主机建立连接,并执行相关命令,而程序使用StreamGobbler去读取结果返回信息,但在没读完之前,这个socket就被关闭了,导致只能读到一部分.想请问各位有没有什么办法,在这个socket关闭前,把所有该命令的执行

runtime-Android Runtime.exec(ping ipaddr)在我们的平台上ping不通

问题描述 Android Runtime.exec(ping ipaddr)在我们的平台上ping不通 1,Runtime.exec(ping ipaddr)在别的平台上(各种平板,手机)都能ping成功,不知道为什么在我们的开发平台上不能ping成功: 2,直接在我们平台的com端上敲ping www.baidu.com可以Ping成功: 3,跟踪了ping.c的代码,发现创建icmp_sock = socket(PF_INET, SOCK_RAW, IPPROTO_ICMP )这个SOCK_

数据-一个c语言解密的问题运行没结果

问题描述 一个c语言解密的问题运行没结果 一个解密的程序,运行的时候没有结果,错误,编译没有错误 #include #include char jiemi(char a[])//吧所有字母都向前移动5位,得出明文 { int i=0; while(a[i]!='') { if(a[i]==','||a[i]==' ') { i++; } else { a[i]=a[i]-5; i++; } } return 0; } int main()//遇到start开始输入数据,遇到end 打印数据 //

runtime.exec()

 Process exec(String command)           在单独的进程中执行指定的字符串命令.  Process exec(String[] cmdarray)           在单独的进程中执行指定命令和变量.  Process exec(String[] cmdarray, String[] envp)           在指定环境的独立进程中执行指定命令和变量.  Process exec(String[] cmdarray, String[] envp, Fi

禁止JVM执行外部命令Runtime.exec -- 由Apache Commons Collections漏洞引发的思考

update: 2015-11-16 新版apache commons collections 3.2.2修复漏洞 新版本的apache commons collections默认禁止了不安全的一些转换类.可以通过升级来修复漏洞.参考release说明:https://commons.apache.org/proper/commons-collections/release_3_2_2.html Dubbo rpc远程代码执行的例子 update: 2015-11-13 重新思考了下这个漏洞,给