首页
学习
活动
专区
圈层
工具
发布

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

通过Java方法去调用shell脚本并执行,该方法会先后调用两个脚本,出现问题的是调用第二个脚本的时候,出现了该问题 问题 使用方法Runtime.getRuntime().exec()调用并执行脚本...操作系统错误代码126:所需的Key不可用 排查 因为看到错误码对应的原因是:Required key not available,所需的Key不可用。...于是只能捕捉进程的输出来看是否能找到蛛丝马迹 增加代码如下: Process proc = Runtime.getRuntime().exec(strMakePathPath); StreamGobbler...; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class...解决 直接权限安排 chmod 777 文件 再次执行代码,发现问题解决了 结论 java通过Runtime.getRuntime().exec()执行shell,Process.waitFor()返回

16900
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java魔法堂:找外援的利器——Runtime.exec详解

    二、认识 java.lang.Runtime.exec方法   作用:用于调用外部程序,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。功能就是和windows的“运行”一样啦。 ?...Runtime r = Runtime.getRuntime(); try{ Process proc = r.exec("cmd /c dir > %dest%", new String[]{"...通过 Process实例.getInputStream() 和 Process实例.getErrorStream() 获取的输入流和错误信息流是缓冲池向当前Java程序提供的,而不是直接获取外部程序的标准输出流和标准错误流...(采用xcopy命令复制大量文件时将会出现该问题)    解决办法就是当前的Java程序不断读取缓冲池的内容,从而为腾出缓冲池的空间。...我们可以通过下列两种方式处理 Runtime r = Runtime.getRuntime(); try{ Process proc = r.exec("cmd /c dir"); // 假设该操作为造成大量内容输出

    1.8K100

    Java 中的 3 个双引号是什么语法?Java 15 刷新你的认知!

    Java 中的 3 个双引号 """ 是什么语法? 这是 Java 15 新出的,刷新你的认知!...一、前言 在 Java 15 的推出的时候,Text Blocks 正式转正,我叫它 “文本块” 好了,栈长也做了简单介绍,没看过的可以点击这里看下。...,熟悉 Python 的都知道,三个双引号表示多行注释,没想到 Java 竟然用作了多行字符串…… 再来看下字节码: 看到了吧?...3、Escape sequences(转义字符) 如下面代码所示: 我在代码中又增加了 \s、\n、\t 之类的转义字符,可以直接拿来用,双引号也不需要转义。...4、格式化参数 Java 15 之前格式化字符串中的参数需要使用 String.format 静态方法,感觉不是很方便,而在 Java 15 中新增了直接格式化字符串的方法: 对上面的 SQL 语句进行扩展下

    1.8K30

    我们来说一说 Java 反序列化漏洞

    (); //执行指定程序 Runtime.getRuntime().exec("open https://www.baidu.com/"); }}运行程序之后,控制台会输出...Runtime.getRuntime().exec("open https://www.baidu.com/");可以再把这段代码改造一下,内容如下://mac系统,执行打开计算器程序命令Runtime.getRuntime...().exec("open /Applications/Calculator.app/");//windows系统,执行打开计算器程序命令Runtime.getRuntime().exec("calc.exe...恶意代码植入的核心就是在对象初始化阶段,直接会调用Runtime.getRuntime().exec("open /Applications/Calculator.app/")这个方法,通过运行时操作类直接执行恶意代码...3.2、增加多层数据校验比较有效的办法是,当把接口参数暴露出去之后,服务端要及时做好数据参数的验证,尤其是那种带有http、https、rmi等这种类型的参数过滤验证,可以进一步降低服务的风险。

    42621

    深入剖析 Java 反序列化漏洞

    (); //执行指定程序 Runtime.getRuntime().exec("open https://www.baidu.com/"); } } 运行程序之后...Runtime.getRuntime().exec("open https://www.baidu.com/"); 我们可以再把这段代码改造一下,内容如下: //mac系统,执行打开计算器程序命令 Runtime.getRuntime...().exec("open /Applications/Calculator.app/"); //windows系统,执行打开计算器程序命令 Runtime.getRuntime().exec("calc.exe...恶意代码植入的核心就是在对象初始化阶段,直接会调用Runtime.getRuntime().exec("open /Applications/Calculator.app/")这个方法,通过运行时操作类直接执行恶意代码...3.2、增加多层数据校验 比较有效的办法是,当我们把接口参数暴露出去之后,服务端要及时做好数据参数的验证,尤其是那种带有http、https、rmi等这种类型的参数过滤验证,可以进一步降低服务的风险。

    1.3K20

    java安全编码指南之:输入校验

    简介 为了保证java程序的安全,任何外部用户的输入我们都认为是可能有恶意攻击意图,我们需要对所有的用户输入都进行一定程度的校验。 本文将带领大家探讨一下用户输入校验的一些场景。一起来看看吧。...但是在Unicode中,同一个字符可能有不同的表示形式。所以我们需要对字符进行标准化。 java中有一个专门的类Normalizer来负责处理,字符标准化的问题。...注意不可信字符串的格式化 我们经常会使用到格式化来对字符串进行格式化,在格式化的时候如果格式化字符串里面带有用户输入信息,那么我们就要注意了。...所以,我们在调用Runtime.exec()的时候,一定要小心注意检测用户的输入。...()方法,而是使用java自带的方法。

    1.2K31

    Java基础-动态编译

    服务器动态加载某些类文件进行编译 动态编译的两种做法: 通过Runtime调用javac,启动新的进程去操作 Runtime run = Runtime.getRuntime(); Process process...= run.exec("javac -cp d:/myjava/ HelloWorld.java"); 通过JavaCompiler动态编译 通过JavaCompiler动态编译 ?...第一个参数:为java编译器提供参数 第二个参数:得到 Java 编译器的输出信息 第三个参数:接收编译器的 错误信息 第四个参数:可变参数(是一个String数组)能传入一个或多个 Java 源文件...返回值:0表示编译成功,非0表示编译失败 通过Runtime.getRuntime()运行启动新的进程运行 Runtime run = Runtime.getRuntime(); Process process...= run.exec("java -cp d:/myjava HelloWorld"); // Process process = run.exec("java -cp "+dir+" "+classFile

    80310

    Java程序员的日常 —— 多进程开发

    最近再弄进程管理相关的工作,因此必要的就涉及到各种系统下关于进程的管理。 这里简单的介绍下: 如何在Java中执行命令 在windows下肯定是dos命令了,而在linux则为shell命令。...执行的方式差不多相同: 方法1:Runtime windows版本: Process process = Runtime.getRuntime().exec("ipconfig /all"); Linux...版本: Process process = Runtime.getRuntime().exec("ifconfig -a"); 由此可以见,java程序都是相同的,只是命令不同而已。...获取进程列表 对比进程列表,得到最新启动的进程 因此,就需要知道如何获得进程列表: windows版本获得进程列表 Runtime.getRuntime().exec("cmd /C tasklist...: windows版本停止进程 Runtime.getRuntime().exec("cmd /C taskkill /F /PID " + pid); linux版本停止进程 Runtime.getRuntime

    1.2K90
    领券