gpt4 book ai didi

unix - 后台进程返回值

转载 作者:行者123 更新时间:2023-12-04 16:12:50 24 4
gpt4 key购买 nike

我需要根据后台进程的返回值采取一些行动,即如果它首先终止。

具体来说:在理想的操作中,我作为后台进程运行的服务器将永远运行。在这种情况下,将它保留在后台是有意义的,因为我希望我的 shell 脚本在生成服务器后做其他事情。但是如果服务器异常终止,我想最好使用服务器的退出返回值来决定是否杀死我的主脚本。如果这是不可能的,我至少想中止主脚本,而不是在出现故障的服务器上运行它。

我正在为 shell 脚本寻找具有异步回调性质的东西。一种解决方案是生成一个监控进程,定期检查服务器是否发生故障。最好我想在主 shell 脚本本身中不这样做。

最佳答案

当子进程通过捕获 SIGCHLD 退出时,您可以使用 shell 陷阱来调用函数。如果只有一个后台进程在运行,那么你可以wait在 sigchld 处理程序中获取它并在那里获取状态。如果有多个后台子进程运行,它会变得有点复杂;这是一个代码示例(仅使用 bash 测试):

set -m # enable job control
prtchld() {
joblist=$(jobs -l | tr "\n" "^")
while read -a jl -d "^"; do
if [ ${jl[2]} == "Exit" ] ; then
job=${jl[1]}
status=${jl[3]}
task=${jl[*]:4}
break
fi
done <<< $joblist
wait $job
echo job $task exited: $status
}
trap prtchld SIGCHLD

(sleep 5 ; exit 5) &
(sleep 1 ; exit 7) &

echo stuff is running

wait

关于unix - 后台进程返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6736060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com