启动后台进程并检查它何时结束

0wn*_*n3r 57 bash

如何在后台启动进程并检查它何时在 bash 脚本中结束?我的想法是这样的脚本:

launch backgroundprocess &
while [ Process is running ];do
   echo "PROCESS IS RUNNING\r"
done;

echo "PROCESS TERMINATED"
Run Code Online (Sandbox Code Playgroud)

Pas*_*iel 94

关键是“等待”命令:

#!/bin/bash

/my/process &
/another/process &
wait
echo "All processes done!"
Run Code Online (Sandbox Code Playgroud)

  • 这样做的好处是:它不会在无限循环一直运行的情况下消耗 CPU 时间.... ;) (8认同)
  • 这样做的缺点是你在等待的时候不能做任何其他的事情,比如向用户指示进度。只有 [cuonglm's solution](http://unix.stackexchange.com/a/76720/6403) 允许您这样做。 (3认同)
  • @Mark Booth 您可以指示第三个异步作业的进度。例如:`cmd1 & p=$!; cmd2 & q=$!; 睡觉时 1; 做 echo 仍在运行;完成并等待 $p $q; 杀 $!;` (3认同)

Mir*_*ici 46

有了wait你可以有粒度,您需要:

sleep 1 &
PID1=$!
sleep 2 &
PID2=$!

wait $PID1
echo 'PID1 has ended.'
wait
echo 'All background processes have exited.'
Run Code Online (Sandbox Code Playgroud)


cuo*_*glm 35

这是一种方法:

launch backgroundprocess &
PROC_ID=$!

while kill -0 "$PROC_ID" >/dev/null 2>&1; do
    echo "PROCESS IS RUNNING"
done
echo "PROCESS TERMINATED"
exit 0
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这绝对是回答我对原始问题的解释的唯一答案(以及我最终查看此问题的原因) (4认同)