如果bash中的一个后台进程失败,如何使整个主进程失败?
所以基本上我需要如果bash中的一个后台进程失败,如何使整个主进程失败?,bash,gitlab-ci,Bash,Gitlab Ci,所以基本上我需要 同时运行存根,服务器和等待 当等待完成时,运行测试 如果存根或服务器失败,则带有等待和测试的主进程也应该失败(否则它会一直挂在那里,直到超时1小时) 剩下的胡言乱语是我最初的问题: 我正在gitlab ci中运行e2e测试。简化脚本如下所示: stubs & server & wait-on && test wait-on是检查服务器何时开始响应特定url,然后测试开始运行。问题是,如果存根或服务器失败,我如何使整个ci作业失败 在晴天场景
- 同时运行
,存根
和服务器
等待
- 当
完成时,运行等待
测试
- 如果
或存根
失败,则带有服务器
和等待
的主进程也应该失败(否则它会一直挂在那里,直到超时1小时)测试
stubs & server & wait-on && test
wait-on是检查服务器何时开始响应特定url,然后测试开始运行。问题是,如果存根
或服务器
失败,我如何使整个ci作业失败
在晴天场景中,它们在后台运行,直到测试结束,容器被杀死,但是在雨天场景中,当至少有一个容器无法编译时,如何杀死容器呢
更新:我好像没说清楚,对不起。因此有两种情况:
测试完成后容器被杀死)-这一切正常
存根
或服务器
无法编译。在这种情况下,wait-on将永远等待,直到容器被超时杀死(在我的情况下是1个小时)-这就是我想要改进的地方:我不想等待一个小时,但只要存根
或服务器
出现故障,就以错误完成所有操作
感谢您的帮助,我对bash非常不了解,很抱歉,如果存根或服务器使用pkill失败,您可以终止主测试进程
{ stubs || pkill -f test; } & { server || pkill -f test; } & wait-on && test
多亏了只需检查后台进程的退出状态
stubs &
stubspid=$!
server &
serverpid=$1
if wait-on && wait "$stubspid" && wait "$serverpid"; then
echo "SUCCESS"
else
echo "FAILURE"
fi
只需在后台进程上等待。什么是测试点<如果在没有参数的情况下执行代码>测试将始终以非零退出状态退出。包括a。我没有否决投票,但如果在成功运行
存根
和服务器
时只是永远运行,这将不起作用。但是假设等待并测试成功,您可能会同时杀死存根
和服务器
并声明成功。如果任何一个后台进程失败,则测试应该失败。(如果没有,那么测试没有正确执行其工作。)Och,我理解了服务器和存根只是在等待
完成后退出,因为“ci作业”引用-我假设这是某种运行ci/cd管道作业,等待
测试某种工作,然后一切都退出,包括后台进程。我认为除非OP指定它是什么,否则我们只能猜测。我的印象是启动代码和测试都是同一管道的一部分。if
语句实际上类似于if-wait-on&&tests&&wait“$stubsid”&&wait“$serverpid”;然后
,直到两个后台作业完成,管道才会退出。和
终止管道,而不是列表。它在前台运行stubs
,如果失败,则在后台运行pkill-f测试。请尝试{stubs;pkill-f test;}&
。