2017-10-13 130 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