主要观点:介绍在容器中运行多个进程的方法,通过 Bash 脚本实现,包括使用exec
避免中间的 bash shell,trap
处理信号,wait
等待进程结束等,还提到若不想让脚本成为 PID 1 进程可修改kill
命令的参数。
关键信息:
- 容器中多个进程需有一个主进程(PID 1),负责启动其他进程、重复信号等。
#!/usr/bin/env bash set -euo pipefail
配置 Bash 脚本的运行环境和选项。function main {... } main "$@"
定义主函数并处理传入参数。trap 'true' SIGINT SIGTERM
捕获信号并执行true
。exec service-a & exec service-b &
在后台运行多个进程。wait -n || true
等待后台进程结束,处理wait
与trap
的特殊情况。kill -s SIGINT -1
向除脚本自身外的所有进程发送SIGINT
信号。- 更新部分:若不想成为 PID 1 进程,可将
kill -s SIGINT -1
改为kill -s SIGINT -$$
,向脚本进程组内的所有进程发送信号。
重要细节: #!
为 shebang,指定解释器。/usr/bin/env bash
利用环境 PATH 变量确定bash
解释器。set -e
在命令退出码非零时立即退出脚本。set -u
使用未设置的变量视为错误。set -o pipefail
影响管道命令的退出码。wait -n
等待单个后台进程结束。kill -1
表示向除脚本自身外的所有进程发送信号。-$$
表示脚本进程组的 ID。使用kill
时若不指定信号需用--
分隔。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。