我的程序在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”)< / p>
然后我将代码更改为:
Process process=Runtime.getRuntime().exec("/bin/ls",null,null);
它抛出了一个例外:
Cannot run program "/bin/ls": java.io.IOException: error=13, Permission denied
我已将所有相关文件和目录的权限更改为777,所以我真的不知道它有什么问题。
感谢您的回复。
答案 0 :(得分:2)
Process process=Runtime.getRuntime().exec("ls",null,null);
由于No such file or directory
很可能不在您程序的当前工作目录中,因此预计会出现ls
异常。当您从Linux shell提示符键入ls
时,它会使用PATH
环境变量将ls
转换为/bin/ls
。 Runtime
不会为您执行此操作。
您需要指定完整路径"/bin/ls"
。正如@Ernest所提到的,你应该使用Runtime.exec("/bin/ls")
方法而不是传入空参数。
Process process=Runtime.getRuntime().exec("/bin/ls");
您的评论似乎表明即使您使用此次通话,也会收到Permission denied
个例外情况。这对我来说是标准的Java可执行文件。我假设您可以成功从Linux命令行执行/bin/ls
? /bin/ls
(以及相关目录)应该是755而不是 777,这将是一场安全噩梦。但777应该可行。
也许您正在运行某种受保护的JDK?例如,出于安全原因,Applet无权执行Unix命令。也许你有一个限制性的Java policy file,你需要添加execute
权限吗?