在Java代码中,通过Runtime.getRuntime().exec ()执行一个shell脚本(譬如:sh runBuild.sh),如果此shell脚本在执行过程中会结束该Java进程,由于Java进程是执行该shell脚本的shell进程的父进程,此时,父进程退出,也会导致shell子进程退出。导致的结果就是,shell脚本执行被中断,现象是shell脚本没有得到完整的执行。
Java调用shell脚本遭遇的问题以及解决办法
原创
©著作权归作者所有:来自51CTO博客作者心如明镜的原创作品,请联系作者获取转载授权,否则将追究法律责任
解决办法:a、shell脚本中不要写会导致Java进程死亡的语句;b、在Java进程中,等待shell脚本执行结束:Process p = Runtime.getRuntime().exec (“sh xxx.sh”); p.waitFor();
如果shell脚本(记为脚本1)中就是要杀死父进程,怎么确保shell脚本能够得到完整的执行?在程序中,通过Runtime.getRuntime().exec ()调用一个简单的shell脚本(记为脚本2),该脚本启动一个独立的Java进程(新的Java进程),让这个新起的Java进程去执行该shell脚本(脚本1)。
结论:Runtime.getRuntime().exec ()去启动一个shell进程,和启动一个Java进程,还是存在一些区别。主要的区别是,父进程退出时,父进程会发退出信号给子进程,看子进程如何处理?我的理解是shell进程,收到父进程的退出信号,也会杀死自己。
如果有人也遇到过类似的情况,或者有更加清楚的解释,请留言告知。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
shell调用本地sh 脚本
【代码】shell调用本地sh 脚本。
bash linux