如何在單個C程式中執行殭屍程序和孤兒程序?


在本節中,我們將瞭解如何在C/C++中的單個程式中執行殭屍程序和孤兒程序。在進入主要討論之前,讓我們先了解什麼是殭屍程序和孤兒程序。

殭屍程序

殭屍程序是指其執行已完成但仍在程序表中具有條目的程序。殭屍程序通常發生在子程序中,因為父程序仍然需要讀取其子程序的退出狀態。一旦使用wait系統呼叫完成此操作,殭屍程序就會從程序表中刪除。這稱為收割殭屍程序。

孤兒程序

孤兒程序是指即使其父程序已終止或完成仍在執行的程序。孤兒程序可以有意或無意地建立。

有意建立的孤兒程序在沒有任何手動支援的情況下在後臺執行。這通常用於啟動無限執行的服務或在無需使用者干預的情況下完成長時間執行的任務。

無意建立的孤兒程序是在其父程序崩潰或終止時建立的。可以使用程序組機制避免無意建立的孤兒程序。

現在,在以下程式碼中,我們將同時執行殭屍程序和孤兒程序。這裡我們有一個父程序,它有一個子程序,而這個子程序又有另一個子程序。如果我們的控制插入到子程序中,那麼我們將停止執行5秒鐘,以便它可以完成父程序。因此,子程序成為孤兒程序。之後,孫子程序將轉換為殭屍程序。當其父程序(主程序的子程序)休眠1秒時,孫子程序完成執行。因此,孫子程序不會呼叫終止,並且其條目將保留在程序表中。

示例程式碼

#include <stdio.h>
#include <unistd.h>
int main() {
   int x = fork(); //create child process
   if (x > 0) //if x is non zero, then it is parent process
      printf("Inside Parent---- PID is : %d
", getpid());    else if (x == 0) { //for chile process x will be 0       sleep(5); //wait for some times       x = fork();       if (x > 0) {          printf("Inside Child---- PID :%d and PID of parent : %d
", getpid(), getppid());          while(1)             sleep(1);          printf("Inside Child---- PID of parent : %d
", getppid());       }else if (x == 0)       printf("Inside grandchild process---- PID of parent : %d
", getppid());    }    return 0; }

輸出

soumyadeep@soumyadeep-VirtualBox:~$ ./a.out
Inside Parent---- PID is : 3821
soumyadeep@soumyadeep-VirtualBox:~$ Inside Child---- PID :3822 and PID of parent : 686
Inside grandchild process---- PID of parent : 3822
soumyadeep@soumyadeep-VirtualBox:~$

更新於: 2019年7月30日

2K+ 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.