2015-11-05 60 views
0

我們有一個bash腳本,可以關閉我們的應用程序,特別是我們有這樣的停止功能。強制關閉失敗時強制終止

doStop(){ 
pid=`cat ${pidfile}` 
echo "Gracefully terminating server with pid $pid" 
kill ${pid} 
echo "Server stopped" 
} 

但是有可能殺將因各種原因失敗,我們要爲殺死它像這樣...

kill -9 ${pid} 

有沒有辦法等待殺,如果它工作,沒有發出kill -9?

+0

可能'kill'本身需要它的時候。所以在它之後,你可以寫和檢查它是否仍在運行,並繼續執行殺死它。 – fedorqui

回答

1

man kill`

殺 - 將信號發送到一個進程

這意味着kill沒有接收到來自所述過程的任何響應。 「等待」過程的唯一方法是檢查過程是否存在一段時間,並在時間不足時發送給他。

e.g(未測試)

doStop(){ 
    pid=$(cat ${pidfile}) 
    echo "Gracefully terminating server with pid $pid" 
    kill ${pid} 
    let count=60 
    while [[ $count -ge 0 ]] && [[ -n "$(ps --pid ${pid} -o pid=)" ]] 
    do 
    sleep 1 
    let "count--" 
    done 

    if [[ -n "$(ps --pid ${pid} -o pid=)" ]]; 
    then 
    kill -9 ${pid} 
    fi 

    if [[ -n "$(ps --pid ${pid} -o pid=)" ]]; 
    then 
    echo "Server stopped" 
    exit 0 
    else 
    echo "Failed to stop server" 
    exit 1 
    fi 
}