- baseline
- 等级: 初级会员
- 文章: 20
- 积分: 90
- 来自: ...
|
发表时间:2007-12-07
最后修改:2009-06-22
用Freemind的做的,大家将就的看看吧,
问题
- java 使用Runtime.getRuntime().execx执行kstat -p -m \'/^e1000g0|^e1000g$/\'失败
- m_process.waitFor()总是返回1
- 0 表示命令执行成功
- 1 表示命令语法错误
- 2 表示命令执行错误
- 解决过程
- 开始不知道为什么出错
- 将命令改为 kstat -p -m /^e1000g0/就可以成功
- 将上了单引号以后,就始终返回1, 即语法错误
- 尝试将单引号改为双引号还是出错
- 问google
- 查Runtime.getRuntime.exec
- 发现有个老兄翻译的别人的一篇文章中有提到,使用Runtime.getRuntime.exec调用重定向有问题
- 心里隐约觉得,自己的方向可能错了,可能并不是一个单引号那么简单的,导致waitFor返回1
- http://lusong163.itpub.net/post/14139/66778
- 查getRuntime().exec 重定向
- 这是第二天的事了,前天弄到晚上十点,没解决
- 知道没那么容易解决,自己的身体要紧,明天还要回上海呢
- 找到另一个老兄的问题
- http://topic.csdn.net/t/20050309/16/3837564.html#
- 他遇到的和我的不一样,他是调用 ps -ef | grep SSS | grep -v grep | awk '{print $2}'
- 我估计可能也是和这个引号有关系
- 后面有个哥们给了个答案
-
天啊,就就是这个答案让我灵光一现
(new String[]{"/bin/sh","-c","ps -ef | grep usb | grep -v grep | awk '{print $2}'"}); 这样就可以了.我在Linux系统上试过
注意到了没,命令不是直接使用的ps,那么我在命令中直接使用kstat是不是也是问题呢
- 解决了
- 根据最后一次找到的哪个关键的帖子
- 将我的命令改为
- 后来验证,关键在 /bin/sh -c 这个命令头
- 这个在window下执行命令是要使用 cmd作为命令的开头是一个道理
- 不过这个现象在solaris中可能只出现在哪些有特殊字符的命令中,比如有单引号什么
- 发现了一个问题
- 在这个链接中是翻译的老外写的一篇文章,
- http://lusong163.itpub.net/post/14139/66778
- 原文地址 http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html
- 其中也提到了 redirect the output of an echo program's simple Java version into the file test.txt.
- 他给出的解决方案是自己写代码重定向文件
- 但是我后来做了一下验证,发现是可以实现重定向文件的
- /bin/sh
- -c
- ls > t.txt
- 这个命令的执行一点问题都没有,t.txt文件也产生了
- 但是使用 java -version >t.txt 能产生文件,但是文件中却没有内容
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
返回顶楼 |
|
|