Java Runtime.getRuntime().exec 不执行

在Linux服务器上用Java调用脚本时,Java Runtime.getRuntime().exec有时无法执行命令。原因一是Java虚拟机可能无法获取系统环境变量,因Linux执行命令需用sh工具;二是异常过多使异常栈满,程序阻塞。解决方法是在命令前加调用sh工具的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java Runtime.getRuntime().exec 不执行

在linux服务器上用java调用脚本,直接写
Java Runtime.getRuntime().exec(“要执行的命令”)有时候发现并不能执行响应的命令。

原因

1.这是因为linux执行命令需要使用linux系统自带的sh工具,而java虚拟机有时候并不能获取到系统的环境变量,导致命令无法被执行
2.还有可能就是异常太多导致异常栈满了,生产者满了无人消费,程序便阻塞了

解决方法

在命令前加上

/bin/sh -c 

表示调用系统/bin目录下的sh工具

如果你用的是字符串传递命令,可以这么写

String [] cmd={"/bin/sh","-c","chmod 755 ./do*"};
Runtime.getRuntime().exec(cmd);

获取异常信息和正常输出信息

Runtime.getRuntime().exec(run).getErrorStream();
Runtime.getRuntime().exec(run).getInputStream();
### 回答1: java runtime.getruntime().execJava中的一个方法,它可以在运行时执行外部命令。它可以用来启动一个新的进程,并在其中执行指定的命令。这个方法返回一个Process对象,可以用来控制和监视这个进程的执行。 ### 回答2: Java Runtime.getRuntime().execJava语言中一个比较常用的方法,主要是用来启动其他进程的。当使用这个方法时,我们可以在Java程序中启动一个外部进程,并与其进行交互。这个方法的基本语法如下: public Process exec(String command) throws IOException 其中,command参数表示要执行的命令。 这个方法的返回值类型为Process,表示启动的进程。 使用Java语言启动其他进程有一些需要注意的问题,如: 1. 启动的进程是在操作系统中独立的,与Java程序是分开的; 2. 当启动进程时,需要保证权限足够才能执行; 3. 启动的程序需要自行设置好输入输出流,以便程序可以向其输入数据,或从其获得输出数据; 4. 在启动其他进程时,需要考虑进程阻塞、进程崩溃等问题。 以下是一个例子: try { Process p = Runtime.getRuntime().exec("cmd /c dir"); BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = null; while ((line = in.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } 以上代码是在Windows平台下启动cmd进程,并运行dir命令。通过p.getInputStream()获取cmd进程的输出流,并使用BufferedReader逐行读取输出结果。读取并输出结果的过程会阻塞当前操作,直到命令执行完毕为止。 需要注意的是,在使用exec方法时,一定要注意防范恶意命令注入和路径遍历等攻击。能直接将用户输入作为exec方法参数使用。同时,建议使用java.nio.file.Path对象来表示文件路径,以避免同操作系统之间的差异。 ### 回答3: Java Runtime.getRuntime().exec()Java中的一个方法,它的作用是在运行时执行指定的命令。该方法可以启动一个子进程,并在子进程中运行指定的命令。 在Java程序中使用该方法可以实现很多功能,比如可以运行外部程序、打开文件、执行系统命令等。通常情况下,我们使用该方法的方式是: Runtime.getRuntime().exec(“command”); 其中,command 参数是一个字符串类型的参数,表示要执行的命令。该参数可以是操作系统中的命令,也可以是程序的可执行文件路径。 在调用该方法时,运行时会新建一个进程来执行指令,该方法的返回值是一个 Process 类型的对象,可以通过该对象来获取进程的输入流、输出流和错误流,并读写进程的标准输入和标准输出。 需要注意的是,在调用该方法时,一定要保证 command 参数的安全性,以免被非法操作恶意利用。同时,使用该方法需要具有足够的权限,才能执行需要的操作。 总之,Java Runtime.getRuntime().exec() 是一个非常有用的方法,可以帮助我们在Java程序中实现很多功能。只要注意安全性和权限问题,深入了解该方法的使用,就可以体会到它的强大和便捷。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值