繁体   English   中英

Java Runtime exec不会抛出此类文件或权限

[英]Java Runtime exec throws no such file or permission denied

我的程序在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,所以我真的不知道它有什么问题。

谢谢您的回复 。

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

由于ls很可能不在您程序的当前工作目录中,因此预计会出现No such file or directory异常。 当您从Linux shell提示符键入ls ,它使用PATH环境变量将ls转换为/bin/ls Runtime不会为您执行此操作。

您需要指定完整路径"/bin/ls" 正如@Ernest所提到的,您应该使用Runtime.exec("/bin/ls")方法而不是传入null参数。

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

您的注释似乎表明即使您使用此调用,您也会收到Permission denied异常。 这对我来说是标准的Java可执行文件。 我假设您可以成功地从Linux命令行执行/bin/ls /bin/ls (和相关目录)应该是755而不是 777,这将是一场安全噩梦。 但是777应该可行。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM