Shell脚本执行Java进程后是否等待完成?是否需检查退出码?
问题解答
1. Shell脚本是否会等待Java进程完成?
是的,Shell脚本执行$START_CMD后会阻塞等待Java进程完全终止,才会继续执行后续代码。这是Shell的默认同步执行逻辑:当前命令执行完毕(无论成功或失败),才会推进到下一行代码。你脚本里的注释疑问是正确的,执行会在这里暂停到Java进程结束。
2. 是否需要条件判断$?的值再执行curl?
不需要额外做条件判断,原因如下:
- 脚本开头的
set -e会让脚本在后续命令退出码非0时立即终止,但你用x=$(echo $?)捕获退出码的操作本身不会失败(echo命令几乎总是返回成功),所以脚本会继续执行curl命令。 - 你的需求是Java应用主线程停止后就执行后处理逻辑,不管Java进程是正常退出(退出码0)还是异常退出(非0),都需要调用Istio的
quitquitquit接口终止Sidecar进程,因此无论x的值是什么,都应该执行curl。
另外可以简化代码:x=$(echo $?)可以直接写成x=$?,两者效果完全一致,不需要通过echo中转。
简化后的脚本示例:
#!/bin/sh set -e set +x JVM_OPTS="-XX:+UseG1GC" # Application start-up JVM args START_CMD="java ${JVM_OPTS} ${JVM_ARGS} -jar ${1}" $START_CMD x=$? # post processing logic after main java thread finishes curl -fsI -X POST http://localhost:15000/quitquitquit exit $x
内容的提问来源于stack exchange,提问作者Amol Aggarwal
相关产品推荐
相关产品推荐

