天天看點

構造僵屍程序

解釋:

僵屍程序是指的父程序已經退出,而該程序dead之後沒有程序接受,就成為僵屍程序.(zombie)程序

産生原因:

每個Unix程序在程序表裡都有一個進入點(entry),ps指令檢視到的程序資訊就存放在這裡。子程序結束之後,核心會釋放掉該程序占用的所有資源,但該程序的程序号、退出碼、退出狀态等資訊還保留,指導其父程序接手并釋放這些資訊。

在UNIX 系統中,如果一個程序結束了,但父程序沒有接受并釋放程序号、退出碼、退出狀态等資訊,則該程序變為僵屍程序。 

檢視方式:

ps aux | grep 'Z'  

即可檢視到系統中現有的僵屍程序。

僵屍程序對系統的影響:

僵屍程序對系統的影響在于過多的僵屍程序會導緻系統無法配置設定新的可用程序号

如何處理僵屍程序:

殺死僵屍程序的父程序,則系統init程序會接手僵屍程序,負責清理。

如何構造僵屍程序:

c語言版

#include <sys/wait.h>
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
        pid_t pids[13];  /*13個程序*/
        int i;

        for (i = 12; i >= 0; --i) {
                pids[i] = fork();
                if (pids[i] == 0) {
                        _exit(0);
                }
        }

        pause(); /*腳本暫停,父程序暫停,産生13個僵屍程序*/

/* 父程序waitpid方法,擷取到僵屍程序exit之後的資訊,則無僵屍程序産生
        for (i = 12; i >= 0; --i)
                waitpid(pids[i], NULL, 0);
*/
        return 0;
}
           

繼續閱讀