java调用shell(ps -ef | grep )问题

shell:

ps -ef | grep 'DevCfg_Cli.pl 51964 ZYYC00002'

[b]在控制台输入,输出正常[/b]
root 3226 3088 0 12:51:04 pts/4 0:00 grep DevCfg_Cli.pl 51964 ZYYC0000

[b]用java Runtime 调的时候,报[/b]

用法:ps [ -aAdeflcjLPyZ ] [ -o 格式 ] [ -t 项列表 ]
[ -u 用户列表 ] [ -U 用户列表 ] [ -G 组列表 ]
[ -p 进程列表 ] [ -g 程序组列表 ] [ -s 标识符列表 ] [ -z 区域列表 ]
'格式' 是一个或者更多的:
user ruser group rgroup uid ruid gid rgid pid ppid pgid sid taskid ctid
pri opri pcpu pmem vsz rss osz nice class time etime stime zone 区域 ID
f s c lwp nlwp psr tty addr wchan fname comm args projid project pset

[code="java"]
public static String exec(String cmd,String encoding) {
StringBuffer sb1;
StringBuffer sb2;
sb1 = new StringBuffer();
sb2 = new StringBuffer();
String temp1 = "";
String temp2 = "";
Runtime rt = Runtime.getRuntime();
try {
System.out.println("[===============执行命令==========]:"+cmd);
Process p = rt.exec(cmd);
BufferedReader bufferedReader1 = new BufferedReader(
new InputStreamReader(p.getInputStream(),encoding));
BufferedReader bufferedReader2 = new BufferedReader(
new InputStreamReader(p.getErrorStream(),encoding));

        while ((temp1 = bufferedReader1.readLine()) != null) {
            sb1.append(temp1);
            System.out.println(temp1);
        }

        while ((temp2 = bufferedReader2.readLine()) != null) {
            sb2.append(temp2);
            System.err.println(temp2);
        }

        p.waitFor();
        return sb1.toString();
    } catch (Exception e) {
        e.printStackTrace();
    }

    return sb1.toString();
}[/code]

2个回答

把命令写成sh文件试试

换成调用exec(String[] cmdarray) 试试,即将ps -ef | grep 'DevCfg_Cli.pl 51964 ZYYC00002' 以空格为分割,转换成字符串数组

iteye_6073
iteye_6073 这里试了不行。字符串和字符数组有什么区别吗?
7 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐