等待特定 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
好吧,仍然有循环,但不是轮询。
什么是从另一个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
好吧,仍然有循环,但不是轮询。