2017-10-13 89 views
0

什么是从另一个shell 等待一个特定的PID的最好的方式(即不循环)最好的办法

其实我用这个解决方案(不一样,如果根工作是老板)

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

替代(不与僵尸突未

工作
+1

每个解决方案都需要使用一个循环(即使它看起来没有),如果你有什么工作,那么它不会是资源密集型的,所以我会坚持下去。 – 123

+0

https://unix.stackexchange.com/questions/169898/what-does-kill-0-do ==> Arf,kill -0 does not for root process – Indent

+1

check for/proc/$ pid' then ,如果它不在那里,那么这个过程就是死的。尽管如此,仍然需要循环。 – 123

回答

0

我很伤心,没有循环显然没有解决,没有“事件”过程API。

我的首选解决方案是

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

通常情况下,你会使用wait外壳内置:

wait $pid 
+0

等待:仅针对当前shell的子进程 – Indent

+0

哦,您想等待另一个shell的子进程? – choroba

+0

对不起:另外一个shell,我会更新我的问题。 – Indent

0

你不能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 

嘛,还是有一个循环,而不是轮询一个。

+0

感谢您的想法。但似乎很复杂。 – Indent