[有许多看起来与此类似的问题,但是似乎没有一个完全相同,并且所有解决方案都不适用于我,所以就这样...
我有一个Java程序,试图自动更新自身。它是这样的:
如果一切正常,那么bash脚本现在将只启动Java主类。
此列表中的所有内容实际上都能正常工作,但当我尝试最后执行bash脚本的最后一步时除外。
bash文件权限如下所示(在运行自动更新之前和之后):
-rwxr-xr-x
据我所知,运行该文件应该没有权限问题(实际上,我可以在进程崩溃后立即手动运行它。)>
这是我得到的错误:
java.io.IOException: Cannot run program "/home/xxx/build/image/bin/run": error=13, Permission denied at java.base/java.lang.ProcessBuilder.start(Unknown Source) at java.base/java.lang.ProcessBuilder.start(Unknown Source) at java.base/java.lang.Runtime.exec(Unknown Source) at java.base/java.lang.Runtime.exec(Unknown Source) at java.base/java.lang.Runtime.exec(Unknown Source) at my_mod/my.Main.main(Unknown Source)
我写了一个类似的“过程炸弹”,但是起作用了:
主类使用以下代码再次启动bash脚本:
// DO NOT RUN THIS AT HOME!
// IT WILL START LOTS OF PROCESSES INFINITELY
// if you do want to try it, have "killall -9 java" ready!
try {
Runtime.getRuntime().exec( path )
System.exit(0);
} catch ( Exception e ) {
e.printStackTrace();
}
所以我认为这不是针对这种过程炸弹的Linux保护。
但是令我完全困惑的是,为什么Linux在更新后仍然拒绝访问运行该bash脚本。
我的操作系统是Ubuntu 19。
我如何找出为什么它拒绝访问,更重要的是,我该如何解决它?
[看起来有很多类似的问题,但是似乎没有一个完全相同,并且所有解决方案都不适用于我,所以就这样...我有一个Java程序...
我终于找到了问题的根本原因:这是由于文件权限引起的,但是不是文件中的错误消息提到了
!