我试图从我的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命令已经结束了?

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

屏住呼吸等待答案!

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

  1. java下载xlsx文件_【小坑】java下载excel文件

    excel文件的导入导出是很常见的功能,这次做了个下载的功能,踩了一些坑,记下来避免以后重复踩-- 1.inputstream序列化问题 Could not write JSON document: ...

  2. java面试题成都_成都汇智动力-java面试——多线程面试题

    原标题:成都汇智动力-java面试--多线程面试题 1.多线程有什么用?发挥多核CPU的优势 防止阻塞 便于建模 2.创建线程的方式继承Thread类 实现Runnable接口 至于哪个好,不用说肯定 ...

  3. java 删除过期文件_定时脚本: 删除HDFS中的过期文件

    1. 基本原理: 通过hadoop fs -ls *命令获取相关文件或目录的修改时间,然后与设定的过期时间进行比较,之后执行删除操作即可 2. 相关代码: #!/bin/bash source ~/. ...

  4. java 判断是否夏令时_确定指定日期的Java夏令时(DST)是否处于活动状态

    我有一个Java类,它占用一个位置的纬度/经度,并在夏时制开启和关闭时返回GMT偏移量.我正在寻找一个简单的方法来确定Java如果当前日期是在夏令时间,所以我可以应用正确的偏移量.目前,我只对美国时区 ...

  5. java分布式调度框架_基于Redis的分布式Java任务执行和调度框架

    Redisson是使用Redis实现分布式任务执行和调度的Java开源项目,它是通过标准JDK的ExecutorService和ScheduledExecutorService API实现的,被提交的 ...

  6. java是脚本语言吗_从脚本语言到Java

    从脚本语言到Java 板桥里人 jdon.com 2002/3 以前我是一直用脚本语言,使用多了,不知不觉一直把数据库设计当作系统设计的主要任务,使用java后,我觉得数据库设计只是一个基础 和前期工 ...

  7. java护照号码校验_学无止境之小白学java……第001天

    学习主题:预科阶段 对应视频: http://www.itbaizhan.cn/course/id/18.html 对应作业: 1. 为什么需要学编程,什么样的人可以做程序员? 编程是现实逻辑的表达, ...

  8. java azure blob 查询_快速入门:适用于 Java 的 Azure Blob 存储客户端库 v8 | Microsoft Docs...

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 快速入门:使用 Jav ...

  9. java编译器jdk版本_以编程方式确定Java类的JDK编译版本

    java编译器jdk版本 当需要确定使用哪个JDK版本来编译特定的Java .class文件时, 通常使用的方法是使用javap并在javap输出中查找列出的"主要版本". 我在我 ...

最新文章

  1. html图片滚动红点_HTML中更换或添加网站背景图片的代码怎么写?(示例)
  2. python字符串转浮点数
  3. JQuery 实现遮罩层
  4. JavaScript原生对象常用方法总结
  5. 纯css 无视宽高设置垂直水平居中
  6. mysql 动态插入日期_mysql 如何动态传入一个时间得到此时间的某个时间点
  7. AWS redshift-hdb pg(Greenplum), 内置函数、数据类型、字符集
  8. opencv Camshift
  9. 大数据第一季--java基础(day27)-徐培成-专题视频课程
  10. B站纪录片发布会,发布的不只是纪录片
  11. 10个团建小游戏备选方案
  12. Delphi 2005 失望的尝鲜!
  13. 618年中大促 ,全场6折起!限量周边8件套!
  14. 领导 - 如何培养您的团队的信心
  15. Android横向滚动卡片,RecyclerView+CardView实现横向卡片式滑动效果
  16. CMT2300A 是一款超低功耗,高性能,适用于各种 127 至 1020 MHz 无线应用
  17. 艾永亮:戴森,你凭什么卖得这么贵?
  18. C++中tan、atan、sin、cos等三角函数用法的代码演示及结果,注意角度和弧度的转换!
  19. 洛谷 P2325 王室联邦
  20. 初学者友好项目 - 使用 CNN 的猫狗分类 ​

热门文章

  1. YbSoftwareFactory 代码生成插件【二十二】:CMS基础功能的实现
  2. 走过13,展望14----希望是个好东西
  3. JS,Jquery获取各种屏幕的宽度和高度
  4. windows server 2003 学习笔记
  5. IntelliJ IDEA 前端调试(Js Debug)
  6. 4、简单工厂模式,工厂方法模式,
  7. CLR探索系列:Windbg+SOS动态调试分析托管代码
  8. UIKIT网页基本结构学习
  9. jAVA 得到Map价值
  10. [Boost基础]并发编程——asio网络库——定时器deadline_timer