如何编写进程ID并获取倒数第二个命令的退出代码

时间:2017-02-01 08:28:31

标签: bash exit-code

我想运行命令,在命令启动时立即将进程ID写入文件,然后获取命令的退出状态。这意味着,虽然必须立即写入进程ID,但只有在初始命令完成时我才想要退出状态。

以下语句将运行该命令,立即写入进程ID,但不会等待命令完成。此外,我只会获得echo命令的退出状态,而不是初始命令的退出状态

在我的情况下,

命令是rdiff-backup。

我如何修改声明?

<command> & echo $! > "/pid_file"
RESULT=$?
if [ "$RESULT" -ne "0" ]; then
  echo "Finished with errors"
fi

1 个答案:

答案 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