天天看点

runtime.exec()windows下代码(需转码)linux下代码Java执行带重定向或管道的shell命令的问题

          在单独的进程中执行指定的字符串命令。

          在单独的进程中执行指定命令和变量。

          在指定环境的独立进程中执行指定命令和变量。

          在指定环境和工作目录的独立进程中执行指定的命令和变量。

          在指定环境的单独进程中执行指定的字符串命令。

          在有指定环境和工作目录的独立进程中执行指定的字符串命令。

dir 指定了新子进程的工作目录。如果 dir 为 null,那么子进程会继承当前进程的当前工作目录

waitfor导致当前线程等待,如有必要,一直要等到由该 <code>process</code> 对象表示的进程已经终止。如果已终止该子进程,此方法立即返回。如果没有终止该子进程,调用的线程将被阻塞,直到退出子进程,<code>0</code> 表示正常终止。

runtime.exec()windows下代码(需转码)linux下代码Java执行带重定向或管道的shell命令的问题

一些平台只为标准输入输出提供有限的缓存。错误的写子进程的输入流或者错误的都子进程的输出流都有可能造成子进程的阻塞,甚至是死锁。

getinputstream   得到正常信息

runtime.exec() 不等同于直接执行command line命令!

runtime.exec()很有局限性,对有些命令不能直接把command line里的内容当作string参数传给exec().

比如重定向等命令。举个例子:

javap -l xxx &gt; output.txt

这时要用到exec的第二种重载

把整个命令都当成/bin/sh的参数传入

linux下

process p = runtime.getruntime().exec(new string[]{"/bin/sh","-c","javap -l xxx &gt; output.txt"});

windows下

process p = runtime.getruntime().exec(new string[]{"cmd","/c","javap -l xxx &gt; output.txt"});

linux执行shell脚本(带参数)

1

假设有一个shell脚本文件test.sh,有两个参数parm1,parm2,java调用的方法如下:

string[] cmd = {"/bin/sh","-c","test.sh parm1 parm2"};

runtime.getruntime().exec(cmd);

2.

不带参数

带参数传入数组

<a href="http://www.linuxidc.com/linux/2012-07/64526.htm" target="_blank">http://www.linuxidc.com/linux/2012-07/64526.htm</a>

<a href="http://www.linuxidc.com/linux/2012-07/64526.htm" target="_blank"></a>

上一篇: sqoop详解