Bash - 仅当后台进程死亡时才获取其返回代码

问题描述 投票:0回答:1

我有一个简单的服务器客户端测试。我将服务器作为后台进程启动,等待 5 秒钟,然后启动客户端。像这样

server > /tmp/serverlog 2>&1 &

sleep 5

client > /tmp/clientlog 2>&1

ret=$?

cat /tmp/serverlog
cat /tmp/clientlog

exit ret

有时,服务器会无法启动。在这种情况下,我想使用服务器的退出代码退出而不启动客户端。

我可以通过

kill -0
检查服务器是否处于活动状态。但我无法获取退出代码。我可以使用
wait
等待服务器完成,但如果服务器没有失败,那么
wait
将永远不会返回。

如何检查后台服务器进程是否死亡并仅在死亡时才获取返回码?

bash
1个回答
0
投票

使用

kill -0
查看服务器是否死机,如果死机,然后使用
wait
获取其退出状态。

server > /tmp/serverlog 2>&1 & server_pid=$!

sleep 5

if ! kill -0 $server_pid; then
    wait $server_pid
    exit  # uses exit status of previous command, which is exit status of server
fi

client > /tmp/clientlog 2>&1

ret=$?

cat /tmp/serverlog
cat /tmp/clientlog

exit $ret
© www.soinside.com 2019 - 2024. All rights reserved.