中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux守護進程實例代碼分析

發布時間:2022-10-19 17:08:10 來源:億速云 閱讀:130 作者:iii 欄目:建站服務器

今天小編給大家分享一下linux守護進程實例代碼分析的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

linux下的常駐進程的作用不可忽略,但這里面的問題也不能忽略,怎么啟動進程,怎么結束進程,怎么在進程掛掉之后重啟進程都要設計的合理。下面看一個shell控制的php常駐進程的例子。

復制代碼 代碼如下:

#!/bin/sh
#filename test.sh
#絕對定位該文件的位置,不隨執行目錄而變化
cd $(cd "$(dirname "$0")";pwd)
readonly path=$(pwd)/
file=$1;
runfile="${path}data/${file}.run"
diefile="${path}data/${file}.die"
readonly file="${path}${file}.php"
if [ ! -f "$file" ]; then
    echo "please select a exists file"
elif [ ! -f "$runfile" ]; then
#這里進行判斷如果runfile文件不存在,則表示該進程不存在,下面啟動進程
    echo $$>${runfile}
    while true
        do
            if [ ! -f $diefile ]; then
            #這里如果diefile文件不存在,則表示程序繼續執行,否則進入else,執行退出操作
                /usr/bin/php -f ${file}
                touch $runfile
                sleep 1
            else
            #如果diefile文件存在清除runfile和diefile退出
                if rm -rf $runfile && rm -rf $diefile ; then
                    exit
                fi
            fi
        done
else
#這里是在存在runfile的情況下試圖啟動該進程
    oldpid=`cat $runfile`
    newpid=`ps aux | grep "process.sh $1" | grep -v grep | grep "$oldpid" | awk '{print $2}'`
    if [[ $oldpid -eq $newpid ]]; then
    #如果runfile中的進程號和正在運行的目標進程號一致,表明一切安好^_^
        echo "the process is runing now"
        exit
    else
    #如果用runfile中的進程號匹配不到正在運行的目標進程,則表示進程有問題,直接刪除runfile并結束運行的進程
        echo "error situation,kill the run process and delete the run file"
        ps aux | grep "process.sh $1" | grep -v 'grep' | awk '{print $2}' | grep -v $$ | xargs --no-run-if-empty kill
        if [ $? -eq 0 ]; then
            rm -f $runfile
        else
            echo $?>${path}/data/error
        fi
    fi
fi

只里面有幾個要強調的地方:

我用這個shell去調用php程序,這個沒有局限性,這里要說明的是這種運行常駐進程的方法
在runfile存在,但進程號對不上殺進程時(也就是紅色額else所執行的地方),一定要 `grep -v $$`,作用是過濾掉當前運行的進程,要不然都被殺掉了,將后面的就不執行了
還有一個要注意的地方就是關于自動重啟了
自動重啟可以放在crontab中,每隔一段時間執行一次,具體情況具體對待。

復制代碼 代碼如下:

crontab -e
#打開當前用戶日程表,添加模式
#日程表中有5個星號,f1,f2,f3,f4,f5,
#其中f1表示分,f2表示時,f3表示日,f4表示月,f5表示一個星期第幾天  
#*表示每分/時/日/月/周天,*/n表示每n分/時/......執行一次
*/2 * * * * /root/test.sh
#沒2分鐘執行一次

這樣一個完整的常駐進程功能就完成了,想要終止進程是只需要在對應的目錄下進行touch ${diefile}即可。

以上就是“linux守護進程實例代碼分析”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巴中市| 肃宁县| 北安市| 西贡区| 闻喜县| 凌源市| 区。| 孟州市| 西青区| 左贡县| 武宁县| 杨浦区| 宁南县| 徐汇区| 同仁县| 吴江市| 齐河县| 林芝县| 陕西省| 静乐县| 克东县| 沁阳市| 德安县| 南澳县| 屏山县| 兴宁市| 沂南县| 孟州市| 大连市| 天长市| 卓资县| 同心县| 唐河县| 大厂| 分宜县| 环江| 郓城县| 遵义县| 锦州市| 安远县| 新田县|