在Java代码中,通过Runtime.getRuntime().exec ()执行一个shell脚本(譬如:sh runBuild.sh),如果此shell脚本在执行过程中会结束该Java进程,由于Java进程是执行该shell脚本的shell进程的父进程,此时,父进程退出,也会导致shell子进程退出。导致的结果就是,shell脚本执行被中断,现象是shell脚本没有得到完整的执行。

解决办法: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进程,收到父进程的退出信号,也会杀死自己。
  
  如果有人也遇到过类似的情况,或者有更加清楚的解释,请留言告知。