Warm tip: This article is reproduced from serverfault.com, please click

ubuntu-Java Runtime exec不会抛出此类文件或权限被拒绝

(ubuntu - Java Runtime exec throws no such file or permission denied)

发布于 2012-06-14 11:17:51

我的程序在ubuntu 10.04上运行,这是代码:

Process process=Runtime.getRuntime().exec("ls",null,null);

它抛出以下异常:

Cannot run program "ls": java.io.IOException: error=2, No such file or directory,  

我想将“ ls”更改为“ chmod”,“ pwd”,但我发现没有一个shell命令可以正常工作(我也尝试了“ / bin / sh -c ls”)

然后我将代码更改为:

Process process=Runtime.getRuntime().exec("/bin/ls",null,null);

它抛出以下异常:

Cannot run program "/bin/ls": java.io.IOException: error=13, Permission denied

我已将所有相关文件和目录的特权更改为777,所以我真的不知道这是怎么回事。

谢谢你的回复 。

Questioner
libing
Viewed
0
Gray 2012-06-14 20:59:40
Process process=Runtime.getRuntime().exec("ls",null,null);

这是一个No such file or directory例外,因为ls它很可能不在程序的当前工作目录中。当你ls从Linux Shell提示符键入内容时,它使用PATH环境变量将其转换ls/bin/lsRuntime不会为你这样做。

你需要指定完整路径"/bin/ls"如@Ernest所述,你应该使用Runtime.exec("/bin/ls")方法,而不要传递null参数。

Process process=Runtime.getRuntime().exec("/bin/ls");

你的评论似乎表明,即使你使用此调用,你也会遇到Permission denied异常。这从标准Ja​​va可执行文件为我工作。我假设你可以/bin/ls从Linux命令行成功完成操作? /bin/ls(以及相关的目录)应该是755,而不是777,这将是安全的噩梦。但是777应该可以工作。

也许你正在运行某种受保护的JDK?例如,出于安全原因,小程序没有执行Unix命令的权限。也许你有一个限制性Java策略文件,并且需要添加execute权限?