linux kill進程沒有立刻停止


前些天在執行restart腳本的時候遇到了一個奇怪的問題:
1、第一次執行進程不見了,啟動失敗
2、第二次重啟進程成功,但是在kill的時候提示進程不存在
需要重啟兩次進程才能成功

查看日志文件:
第一次重啟失敗是因為端口被占用,那么意味着進程沒有被kill掉。第二次kill提示進程不存在則是因為
在第一次重啟進程的時候寫入了新的進程號(然后在綁定端口監聽的時候發現端口被占用,進程啟動失敗)

 

接下來需要研究的是,在執行了kill之后進程為什么沒有立刻被kill掉,查資料發現:

 

也就是說執行kill以后,信號被放在了pending對列中,下一次cpu調度這個進程耗時較長。

 

查看了一下,系統600多個進程,所以暫時的處理辦法是先sleep 0.1s,然后再執行kill命令

 

參考:

1、當執行kill -9 PID時系統發生了什么
2、Linux進程狀態:D

 

附:重啟腳本

#!/bin/bash

BASEDIR=$(cd "$(dirname "$0")";pwd)
PID=./bin/process.pid

# kill server
if [ -e "$PID" ]; then
    cat "${BASEDIR}"/bin/process.pid | xargs kill -9
    sleep 0.1
    rm -rf ${BASEDIR}/bin/process.pid
    echo "stop process success..."
fi

mkdir -p ${BASEDIR}/log

# start server as daemon
cd ${BASEDIR}/bin
chmod +x ./process
nohup ./**  >> ${BASEDIR}/log/out.log 2>&1 &
echo "restart process server success..." 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM