Java Process返回权限仅在某个时候被拒绝。

时间:2014-12-17 04:43:23

标签: java bash process

我正在从Java运行shell脚本。它大部分时间都有效,但偶尔会引发异常“许可被拒绝”

  PrintWriter writer = new PrintWriter(folder + cmdFile, "UTF-8");
    writer.println("#!/bin/bash");
    writer.println(commandLine.toString());
    writer.close();

    Process processUtil = Runtime.getRuntime().exec("/bin/chmod +x " + folder +  cmdFile );
    Process process = Runtime.getRuntime().exec(folder + "./" + cmdFile);
    try {
        int processResponseCode = processUtil.waitFor();

        processUtil = Runtime.getRuntime().exec("sleep 0.1s");
        processResponseCode = processUtil.waitFor();


        processResponseCode = process.waitFor();

        processUtil = Runtime.getRuntime().exec(" rm " + folder + cmdFile);
        processResponseCode = processUtil.waitFor();

例外

 java.io.IOException: Cannot run program "/tmp/./cmd755784": error=13, Permission denied 

任何可能导致这种情况的想法?

2 个答案:

答案 0 :(得分:0)

请检查是否有任何其他进程正在使用或持有正在删除的此目录/文件的句柄。用户fuser命令检查。根据fuser的输出,脚本应该等待一段时间并设置超时来处理其他异常情况。这不属于问题的范围,但您需要在以下内容中改进编码:

  1. 编写一个可以参数的shell脚本,在这种情况下,它们是文件夹路径和文件名
  2. 通过传递这些参数来调用shell脚本。
  3. 进程调用应该是异步的,这意味着应该在循环中或通过句柄/信号调用和等待进程,以避免无限期等待。
  4. PS:我建议不要使用Java中的任何脚本,除非没有其他方法。避免它。

答案 1 :(得分:0)

/tmp执行文件有时会出现问题,因为/tmp经常被挂载noexec

尝试从其他目录运行。