我想运行命令,在命令启动时立即将进程ID写入文件,然后获取命令的退出状态。这意味着,虽然必须立即写入进程ID,但只有在初始命令完成时我才想要退出状态。
以下语句将运行该命令,立即写入进程ID,但不会等待命令完成。此外,我只会获得echo命令的退出状态,而不是初始命令的退出状态
在我的情况下,命令是rdiff-backup。
我如何修改声明?
<command> & echo $! > "/pid_file"
RESULT=$?
if [ "$RESULT" -ne "0" ]; then
echo "Finished with errors"
fi
答案 0 :(得分:4)
您需要在后台进程wait
获取其退出状态:
_command_for_background_ & echo $! > pid_file
: ... do other things, if any ...
#
# it is better to grab $? on the same line to prevent any
# future modifications inadvertently breaking the strict sequence
#
wait $(< pid_file); child_status=$?
if [[ $child_status != 0 ]]; then
echo "Finished with errors"
fi