【问题标题】:Bash - running process in background and getting return code after it's done [duplicate]Bash - 在后台运行进程并在完成后获取返回码[重复]
【发布时间】:2018-02-23 09:55:12
【问题描述】:

在 bash 中,我想运行一个后台进程,在进程运行时循环执行某些操作,一旦进程停止,我想获得它的返回码。

这是我目前所拥有的:

my_build_command
build_pid=$!
sleep 1
while [[ -d /proc/$build_pid ]]
do
    # Do something...
    sleep 1
done

# HOW TO GET THE RETURN CODE OF build_pid?

有没有可能实现我想要的?

【问题讨论】:

  • @jandob 我没有。现在会看。
  • 在后台运行命令只是为了在等待它完成的同时循环旋转锁是一个奇怪的问题解决方案。只是不要在后台运行它。
  • @tripleee 我是 XY-ing 吗?
  • 显然有正当的理由来背景化某些东西,也许您确实在循环中执行了一些有用的操作,但即使您想排除不相关的代码,也可以在问题中提及这一点。跨度>

标签: bash


【解决方案1】:

wait $pid确实返回对应后台进程的返回码

#!/usr/bin/env bash

(sleep 2; true) &
background_process1_pid=$!
(sleep 2; false) &
background_process2_pid=$!

echo "doing something"

wait $background_process1_pid
echo "background_process1 return code: $?"

wait $background_process2_pid
echo "background_process2 return code: $?"

【讨论】:

  • 好答案,但我的问题与您在评论中指出的一样重复,所以我将其删除。
【解决方案2】:

之前执行的程序的返回码由echo $?给出。

在您的情况下,您可能希望使用sleep 1

之前获取值

【讨论】:

  • 不,因为这个过程还没有完成,所以这行不通。
猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 2018-01-12
  • 2015-11-30
  • 1970-01-01
  • 2018-01-15
  • 2013-09-21
  • 1970-01-01
  • 2011-05-23
相关资源
最近更新 更多