gpt4 book ai didi

Java Runtime exec 抛出没有这样的文件或权限被拒绝

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:30:03 28 4
gpt4 key购买 nike

我的程序在 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);

这预计会产生一个No such file or directory 异常,因为ls 很可能不在您程序的当前工作目录中。当您在 Linux shell 提示符下键入 ls 时,它会使用 PATH 环境变量将 ls 转换为 /bin/lsRuntime 不会为您执行此操作。

您需要指定完整路径"/bin/ls"。您应该使用 Runtime.exec("/bin/ls") 方法,而不是传入空参数。

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

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

也许您正在运行某种 protected JDK?例如,出于安全原因,Applet 没有执行 Unix 命令的权限。也许你有限制 Java policy file并且您需要添加执行权限?

关于Java Runtime exec 抛出没有这样的文件或权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11031954/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com