主要观点:介绍在容器中运行多个进程的方法,通过 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) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。