我有一个简单的服务器客户端测试。我将服务器作为后台进程启动,等待 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
将永远不会返回。
如何检查后台服务器进程是否死亡并仅在死亡时才获取返回码?
使用
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