上一篇地址:https://mp.csdn.net/postedit/83857969
在上次命令中,一直没出现问题,直到前段时间公司所有服务器迁移,项目也随着迁移,介于服务器性能上存在的差异,在执行 while ((rspLine = in.readLine()) != null) {}中出现了进程阻塞,形成死循环状态,其实呢linux命令已经正确执行完,.getInputStream()发生阻塞。找了很多方法不断试,找到了ProcessBuilder,
ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,此类用于创建操作系统进程,它提供一种启动和管理进程(也就是应用程序)的方法。在J2SE 1.5之前,都是由Process类处来实现进程的控制管理。
每个 ProcessBuilder 实例管理一个进程属性集。它的start() 方法利用这些属性创建一个新的 Process 实例。start() 方法可以从同一实例重复调用,以利用相同的或相关的属性创建新的子进程。
下面是代码:
//下面是linux命令,window命令只需要把下面 String[] command = {"/bin/sh","-c",cmds}的"/bin/sh"变成"cmd"。
public static int executeNewFlow(String cmds) {
logger.info("命令:"+cmds);
int iden =