等待特定 pid 的最佳方法

best way to wait a particular pid

什么是从另一个shell等待特定pid的最佳方法(即没有循环)

实际上我使用这个解决方案(如果 root 是所有者则不起作用):

while kill -0 $pid > /dev/null 2>&1
do
   echo "waiting $pid"        
   sleep 10
done

备选方案(不适用于僵尸进程

while ps -p `cat $PID_FILE` > /dev/null 2>&1
do
    echo "waiting $pid" 
    sleep 10; 
done

通常,您会使用 wait shell 内置函数:

wait $pid

我很难过,显然没有没有循环的解决方案,也没有 "event" API 的过程。

我的首选解决方案是

while [ -e /proc/$pid ]
do
   echo "waiting $pid"        
   sleep 10
done

如果您不是进程的父级,则不能 wait 进程。如果你真的想要一种在另一个 shell 中获取信息的方法,你可以像这样解决它:

mkfifo process_done_fifo
do_your_job &
pid=$!
wait $pid
echo $pid > process_done_fifo

在另一个 shell:

while true; do
    read pid < process_done_fifo
    if [ $pid = $pid_you_are_waiting_for ]; then
        break
    fi
done

好吧,仍然有循环,但不是轮询。