linux 如何保存bash命令的退出代码和这个命令的pid?

b4lqfgs4  于 2023-11-17  发布在  Linux
关注(0)|答案(1)|浏览(138)
salt   -L servers state.apply  tomcat.fullstart concurrent=True 
  deploy_pid=$!
  exit_code=$?
  [ $exit_code -ne 0 ] && echo "An error occured during applying tomcat salt state" && exit $exit_code

  wait $deploy_pid

字符串
我想得到第一个salt命令的退出代码,上面我认为退出代码来自deploy_pid=$!,而不是来自第一个salt命令。我还需要salt命令pid,所以等待它。
我该怎么做?谢谢

uelo1irk

uelo1irk1#

您没有在后台运行salt,因此deploy_pid=$!没有意义。
如果你在后台运行它,你不能在wait之前检查它的退出状态,因为它必须首先退出。所以操作的顺序需要是:
1.使用&在后台运行salt
1.保存其PID
1.在未来的某个时候,wait
1.获取wait的退出状态

#                                                         Put salt in background
#                                                                |
#                                                                V
 salt   -L servers state.apply  tomcat.fullstart concurrent=True &
  deploy_pid=$! # get the PID of the backgrounded process
  wait "$deploy_pid" # wait for salt to finish
  exit_code=$? # get the exit status

字符串
此外,作为一个结束的想法,如果你要后台处理一个进程,然后立即等待它,那么也许你根本不需要后台处理它,除非你真的需要知道它运行的PID。
如果你不需要背景知识,这样的事情会更简单:

if salt -L servers state.apply  tomcat.fullstart concurrent=True ; then
  echo "Salt worked. Do success stuff here."
else
  echo "Salt failed. Do failure stuff here."
fi

相关问题