Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Linux:java通过Runtime.getRuntime().exec()执行shell,Process.waitFor()返回Required key not available(126)问题

Linux:java通过Runtime.getRuntime().exec()执行shell,Process.waitFor()返回Required key not available(126)问题

作者头像
鲲志说
发布于 2025-04-07 13:18:24
发布于 2025-04-07 13:18:24
7000
代码可运行
举报
运行总次数:0
代码可运行

通过Java方法去调用shell脚本并执行,该方法会先后调用两个脚本,出现问题的是调用第二个脚本的时候,出现了该问题

问题

  1. 使用方法Runtime.getRuntime().exec()调用并执行脚本
  2. Process.waitFor()方法返回值是否为0来确定是否成功执行(成功为0)
  3. 返回错误码126
  4. 查看Process.waitFor()方法的返回值:Required key not available 操作系统错误代码126:所需的Key不可用

排查

因为看到错误码对应的原因是:Required key not available,所需的Key不可用。查找了很多相关解决办法,发现都不太相关。

于是只能捕捉进程的输出来看是否能找到蛛丝马迹 增加代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Process proc = Runtime.getRuntime().exec(strMakePathPath);  
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "Error");  
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "Output");  
errorGobbler.start();  
outputGobbler.start();  
proc.waitFor(); 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class StreamGobbler extends Thread {

    InputStream is;
    String type;

    public StreamGobbler(InputStream is, String type) {
        this.is = is;
        this.type = type;
    }

    public void run() {
        try {
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            while ((line = br.readLine()) != null) {
                if (type.equals("Error")) {
                    System.out.println("Error   :" + line);
                } else {
                    System.out.println("Debug:" + line);
                }
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

校验输出如下error(当时忘记截图了,看红色字)

于是去看了一下两个脚本的权限,结果果然有区别,第二个脚本没有可执行权限 所以问题是否在这里呢?

解决

直接权限安排

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chmod 777  文件

再次执行代码,发现问题解决了

结论

java通过Runtime.getRuntime().exec()执行shell,Process.waitFor()返回Required key not available(126)问题的解决办法:可以看一下文件权限是否有问题

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
打工人打工魂,打工的必会java调用python的几种用法(看这篇就够了)
创建maven工程,结构如下:到官网https://www.jython.org/download.html下载Jython的jar包或者在maven的pom.xml文件中加入如下代码:
用户7656790
2020/11/03
5.8K0
打工人打工魂,打工的必会java调用python的几种用法(看这篇就够了)
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
我们项目要java执行命令“dmidecode -s system-uuid”获取结果,然而碰到问题,当项目一直执行好久后,Runtime.getRuntime().exec()获取结果为空,但也不报错,重启项目就又可以了,所以猜测属于陷阱2,并进行记录。
刘大猫
2024/11/17
7620
【转】Java中Runtime.exec的一些事 
Runtime类是一个与JVM运行时环境有关的Singleton类,有以下几个值得注意的地方:
yiduwangkai
2019/09/17
3.1K0
java调用wkhtmltopdf生成pdf文件,美观,省事
最近项目需要导出企业风险报告,文件格式为pdf,于是搜了一大批文章都是什么Jasper Report,iText ,flying sauser ,都尝试了一遍,感觉不是我想要的效果,
大道七哥
2019/09/10
5.1K1
java调用wkhtmltopdf生成pdf文件,美观,省事
JAVA001-java  调用bash shell脚本阻塞问题的解决
使用java实现的web端,web端相应用户的界面操作,使用java调用bash实现的shell脚本进行实际的操作,操作完成返回执行结果给web 界面显示。
上善若水.夏
2018/09/28
1.4K0
Process API 指南-Java快速进阶教程
它所指的进程是一个正在执行的应用程序。Process类提供与这些进程交互的方法,包括提取输出、执行输入、监视生命周期、检查退出状态以及销毁(终止)它。
jack.yang
2025/04/05
830
java mencoder_mencoder java linux[通俗易懂]
在执行转化的时候只能转化1分钟的影片超过1分钟影片的都不能转化。可是直接输入命令行又能全部转化。高分求解try{Runtimert=Runtime.getRuntime();Processproc=rt.exec(“mencoder”+ol…
全栈程序员站长
2022/11/17
3010
Java调用CMD命令
Windows下复制: copy C:\server\data\ccgavr\1.png C:\server\data\ccgavr\2.png Windows重命名: ren 1.png 3.png ren C:\server\data\ccgavr\1.png C:\server\data\ccgavr\3.png(DOS中提示命令语法不正确,powershell则可以)
JaneYork
2023/10/11
3570
Java调用CMD命令
RunTime.getRuntime().exec()运行脚本命令介绍和阻塞
 java在企业级项目开发中,无论是强制性的功能需要,还是为了简便java的实现,需要调用服务器命令脚本来执行。在java中,RunTime.getRuntime().exec()就实现了这个功能。     用法:         public Process exec(String command)-----在单独的进程中执行指定的字符串命令。        public Process exec(String [] cmdArray)---在单独的进程中执行指定命令和变量               
生活创客
2018/01/30
3K0
RunTime.getRuntime().exec()运行脚本命令介绍和阻塞
Java 配 Shell 等于美酒加咖啡
技术上又何尝不是如此呢?先假设一个场景:BOSS 让你实现一个服务监控的指挥室,能看到每个服务器的磁盘剩余空间,能看到。。。能看到。。。
一猿小讲
2019/09/17
8270
Java 配 Shell 等于美酒加咖啡
java:自定义变量加载到系统变量后替换shell模版并执行shell
这里有两种实现, 一种是项目加载自定义变量文件到系统变量中; 另一种是shell通过source .env环境变量方式加载。
鲲志说
2025/04/07
750
java:自定义变量加载到系统变量后替换shell模版并执行shell
Process类详解
ProcessBuilder是一个final类,Process是一个抽象类。ProcessBuilder.start() 和 Runtime.exec() 方法都被用来创建一个操作系统进程(执行命令行操作),并返回 Process 子类的一个实例,该实例可用来控制进程状态并获得相关信息。
matt
2022/10/25
1.6K0
storm(3)-任务提交
本地模式其实其实使用的是127.0.0.1,如果在storm集群上,借助storm jar则使用的是storm.yaml中的配置
yiduwangkai
2019/09/17
5400
storm(3)-任务提交
Java: SpringBoot 执行Shell/Bat脚本
通过Java启动Shell、Bat脚本,执行脚本命令,支持接收正常结果及异常结果。
Freedom123
2024/03/29
5760
Java调用含第三方库Python脚本传递数据并返回计算结果
目前有几种Java调用Python的方法,不过能良好兼容Python第三方库的方法通常是使用
SL_World
2021/09/18
2.7K0
如何在 Java 中运行 shell 命令-Java快速入门教程
首先,我们将使用 .exec() 方法,其由运行时类提供。然后,我们将了解ProcessBuilder,它更易于定制。
jack.yang
2025/04/05
810
代码分享:用java备份MySQL数据库
t-io官网的数据库都会定时备份,并且可以通过http直接下载到本地(这个当然需要特权,不是人人有这个操作权限),为了操作的灵活性,采用java来实现MySql的备份
talent-tan
2019/08/03
2.6K0
Java调用EXE
做文档转换的时候,使用Java调用COM接口的时候,如果文档中有字体没有的话,在转换的时候会弹窗,导致转换卡死,再加上转图片还需要装额外的软件,比较麻烦。
码客说
2023/04/27
1.5K0
java 执行shell命令及日志收集避坑指南
有时候我们需要调用系统命令执行一些东西,可能是为了方便,也可能是没有办法必须要调用。涉及执行系统命令的东西,则就不能做跨平台了,这和java语言的初衷是相背的。
烂猪皮
2021/01/14
2.7K0
Java魔法堂:找外援的利器——Runtime.exec详解
一、前言                                  Java虽然五脏俱全但总有软肋,譬如获取CPU等硬件信息,当然我们可以通过JNI调用C/C++来获取,但对于对C/C++和Windows API不熟的码农是一系列复杂的学习和踩坑过程。那能不能通过简单一些、学习成本低一些的方式呢?答案是肯定的,在功能实现放在首位的情况下,借他山之石是最简洁有力的做法。而 Runtime.exec方法 就为我们打开这么的一条路了。 二、认识 java.lang.Runtime.exec方法   作用
^_^肥仔John
2018/01/18
1.7K0
Java魔法堂:找外援的利器——Runtime.exec详解
相关推荐
打工人打工魂,打工的必会java调用python的几种用法(看这篇就够了)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验