<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>

            如何避免出現僵尸進程

            時間:2024-09-27 23:42:17 Linux認證 我要投稿
            • 相關推薦

            如何避免出現僵尸進程

              所謂僵尸進程,就是指子進程結束后,其實并沒有真正被銷毀,而是留下一個稱為僵尸進程(Zombie)的數據結構,它幾乎放棄了所有內存空間,沒有任何可執行代碼,也不能被調度,僅僅在進程列表中保留一個位置,記載進程的退出狀態等供其他進程搜集,此時即使用root身份kill -9也不能將其殺死,此時唯一的補救辦法就是找到它的父進程,并將其殺死,此時僵尸進程過繼給init,由init負責回收。那么怎樣用兩次fork來避免僵尸進程呢

              #include

              #include

              #include

              #include

              #include

              int main()

              {

              pid_t pid;

              pid=fork();

              if(pid<0)

              {

              perror("child1 create failed\n");

              exit(-1);

              }

              else if(pid==0)

              {

              /*child1*/

              pid=fork();

              if(pid<0)

              {

              perror("child2 create failed\n");

              exit(-1);

              }

              else if(pid>0)

              {

              /*child1結束*/

              exit(0);

              }

              /*child2*/

              sleep(2);//因為不知道child1和child2哪個先執行,所以讓child2先睡兩秒

              /*TODO child2*/

              exit(0);

              }

              /*parent*/

              if(waitpid(pid,NULL,0)!=pid) //wait for child1

              {

              perror("waitpid error\n");

              exit(-1);

              }

              /*TODO parent*/

              exit(0);

              }

              總的說來,其實就是父進程parent創建一個子進程child1,child1再創建它的子進程child2,此時結束child1,child2就自然過繼給init啦,這樣以后無論怎樣,當child2結束時直接就由init釋放,再也影響不到parent進程了,也不可能會出現僵尸進程啦

            【如何避免出現僵尸進程】相關文章:

            如何避免數控機床出現的安全問題?10-25

            避免中考常出現的15個“意外”06-07

            如何避免蜘蛛陷阱06-14

            如何避免瑜伽傷害10-21

            避免談話出現僵局的3個技巧06-04

            如何避免酒后駕車-避免酒后駕車的方法08-22

            如何避免商品漏發08-09

            如何打高球避免高爾夫10-26

            如何避免汽車后視鏡盲區07-13

            如何避免孩子的起床氣?07-05

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院