• <tbody id="wslfv"><pre id="wslfv"></pre></tbody>
    <span id="wslfv"></span>
    <tbody id="wslfv"><pre id="wslfv"></pre></tbody>
    <th id="wslfv"><track id="wslfv"><rt id="wslfv"></rt></track></th>

    <li id="wslfv"><acronym id="wslfv"></acronym></li>
    更多課程 選擇中心

    嵌入式培訓
    達內IT學院

    400-111-8989

    嵌入式新手如何有效解決linux系統下的僵尸進程?

    • 發布:嵌入式培訓
    • 來源:嵌入式問答
    • 時間:2017-11-09 11:02

    嵌入式新手如何有效解決linux系統下的僵尸進程,下面是來自達內教育小編整理的關于解決僵尸進程的方法的總結。

    一、產生原因

    進程結束時都做些什么呢? 做這么幾件事情:

    1) 釋放資源,包括內存資源,文件標識符,數據庫連,設備資源等等

    2) 調用exit系統調用

    3) 修改進程表狀態為“僵死”狀態(Zombie),使用ps –el查看狀態為“Z”,進程表保存的信息包括:進程ID、進程狀態、運行時間等等

    4) 發送信號SIGHUP給父進程(除INIT進程外,其他進程都有父進程),等待其回收進程表資源

    因此進程結束之后,并沒有完全結束,而是進入了“僵死”狀態,等待父進程回收;

    父進程回收之前,僵死進程基本不占任何資源,僅僅占系統進程表的一個進程號和一條記錄,由于系統的進程號資源是有限的,如果系統產生大量的僵死進程,會導致系統無法產生新進程。

    二、查看方法

    ps –ely #S列為Z值的記錄

    #linux系統下,自動腳本

    ps –ely | gawk ‘$1==”Z”’

    或者

    ps –ef | grep “defunct” | grep –v “grep”

    復雜點的腳本:lZombie.sh

    cat lZombie.sh

    #look for processes of zombie state

    #get the position of “S” state

    i=1

    ps –ely| awk ‘NR==1’| while read line

    do

    if [ $line = “S” ]

    then

    break

    fi

    done

    #print the info of zombie processes

    ps –ely| awk ‘$”’$i’”==”Z”’

    #或者 ps –ely| awk ‘$’$i’==”Z”’

    三、處理方法

    1) 通知父進程子進程回收僵死進程

    Kill –s SIGCHLD PPID

    2) 如果確認父進程及其子進程已經“無用“,則直接殺死父進程及其子進程,INIT拖掛僵死進程后會自動清理之

    Kill –s SIGTERM PPID PID1 PID2

    或kill -15 PPID PID1 PID2

    四、如何避免

    1) 父進程通過wait或waitid等函數回收僵死子進程

    2) 子進程結束時,主動發送SIGCHLD信號給父進程,父進程在信號處理模塊調用wait函數

    3) 父進程不關心子進程什么時候結束,那么可以使用signal(SIGCHLD, SIG_IGN)通知內涵,父進程對子進程不感興趣,那么子進程結束后,內核直接回收;或者用sigaction函數為SIGCHLD信號設置SA_NOCLDWAIT:

    struct sigaction sa;

    sa.sa_handler = SIG_IGN;

    sa.sa_flags = SA_NOCLDWAIT;

    sigemptyset(&sa.sa_mask);

    sigaction(SIGCHLD, &sa, NULL);

    4) fork兩次,父進程fork一個子進程,然后繼續工作,子進程fork一個孫進程后退出,那么孫進程被init接管,孫進程結束后,init會回收。不過子進程的回收還要父進程來做。

    預約申請免費試聽課

    填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

    上一篇:什么是嵌入式開發?
    下一篇:嵌入式系統如何選擇微控制器?

    嵌入式新手如何去自學嵌入式呢?

    嵌入式新手入門須知

    Linux系統中的”隊列”是什么?

    嵌入式新手如何學習嵌入式?

    • 掃碼領取資料

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    欧美一级高清片,一级欧美免费大片视频,欧美三级在线电影免费 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>