lib*_*ing 6 java ubuntu runtime.exec
我的程序在ubuntu 10.04上运行,这里是代码:
Process process=Runtime.getRuntime().exec("ls",null,null);
Run Code Online (Sandbox Code Playgroud)
它抛出了一个例外:
Cannot run program "ls": java.io.IOException: error=2, No such file or directory,
Run Code Online (Sandbox Code Playgroud)
我试图将"ls"改为"chmod","pwd",我发现没有一个shell命令工作,都遇到了同样的问题.(我也试过"/ bin/sh -c ls")
然后我将代码更改为:
Process process=Runtime.getRuntime().exec("/bin/ls",null,null);
Run Code Online (Sandbox Code Playgroud)
它抛出了一个例外:
Cannot run program "/bin/ls": java.io.IOException: error=13, Permission denied
Run Code Online (Sandbox Code Playgroud)
我已将所有相关文件和目录的权限更改为777,所以我真的不知道它有什么问题.
谢谢您的回复 .
Process process=Runtime.getRuntime().exec("ls",null,null);
Run Code Online (Sandbox Code Playgroud)
这预计会出现No such file or directory异常,因为ls它很可能不在程序的当前工作目录中。当您ls从 Linux shell 提示符下键入时,它会使用PATH环境变量将其转换ls为/bin/ls. Runtime不会为您执行此操作。
您需要指定完整路径"/bin/ls"。您应该使用该Runtime.exec("/bin/ls")方法而不是传入空参数。
Process process=Runtime.getRuntime().exec("/bin/ls");
Run Code Online (Sandbox Code Playgroud)
您的评论似乎表明,即使您使用此调用,您也会遇到异常Permission denied。这对我来说适用于标准 Java 可执行文件。我假设您可以/bin/ls从 Linux 命令行成功执行此操作? /bin/ls(以及相关的目录)应该是 755 而不是777,这将是一个安全噩梦。但 777 应该可以。
也许您正在运行某种受保护的 JDK?例如,出于安全原因,Applet 没有执行 Unix 命令的权限。也许您有一个限制性的Java 策略文件并且需要添加execute权限?
| 归档时间: |
|
| 查看次数: |
7112 次 |
| 最近记录: |