java 下载处于挂起状态_即使脚本执行完成,Java也会挂起。

我试图从我的Java代码中执行脚本,看起来像:

Process p = Runtime.getRuntime().exec(cmdarray, envp, dir); // cmdarray is a String array

// consisting details of the script and its arguments

final Thread err = new Thread(...); // Start reading error stream

err.start();

final Thread out = new Thread(...); // Start reading output stream

out.start();

p.waitFor();

// Close resources

脚本的执行结束了(它不再是PID)了,但是Java被卡住了。

waitFor()

过程的方法!.

是的,我在两个单独的线程中读取输出和错误流。是的,它们在末端连接(之后

WAIT()

)

脚本基本上安装了一些RPM(比如10个左右)并对其进行配置。所以脚本运行60秒多一点。

它看起来类似于以下内容:

#!/bin/sh

#exec 3>&1 >/var/log/some_log 2>&1

# If the above line is uncommented, Java recognizes that the

# process is over and terminates fine.

tar xzf a-package-having-rpms.tar.gz

cd unpacked-folder

(sh installer-script.sh) #This installs 10 odd rpms in a subshell and configures them

cd ..

rm -rf unpacked-folder

exit 0

令人震惊的是,如果我把下面的一行放在脚本(顶部),Java就知道脚本已经结束,它完美地终止了这个过程。

exec 3>&1 > /var/log/some_log 2>&1

对于记录,脚本不会生成任何输出。零字符!。因此,将exec语句置于此处毫无意义!

但是,神奇的是,将脚本中的Excel语句放入Java中就可以了!.

为什么??

如何避免脚本中的不合逻辑的exec语句?.

如果您对installer-script.sh的外观感兴趣,那么:

#!/bin/sh

exec 3>&1 >>/var/log/another-log.log 2>&1

INSDIR=$PWD

RPMSDIR=$INSDIR/RPMS

cd $RPMSDIR

#

rpm -i java-3.7.5-1.x86_64.rpm

rpm -i --force perl-3.7.5-1.x86_64.rpm

rpm -i --nodeps mysql-libs-5.0.51a-1.vs.i386.rpm

rpm -i --nodeps mysql-5.0.51a-1.vs.i386.rpm

rpm -i --nodeps mysql-server-5.0.51a-1.vs.i386.rpm

rpm -i --nodeps perl-DBD-MySQL-3.0007-2.el5.i386.rpm

rpm -i --nodeps perl-XML-Parser-2.34-6.1.2.2.1.i386.rpm

.

.

.

现在,为什么Java需要知道第一个脚本中的Excel命令已经结束了?

我怎样才能避开那个主管?,特别是因为第一个脚本不产生任何输出。

屏住呼吸等待答案!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值