首頁  >  文章  >  後端開發  >  如何在單一C程式中執行殭屍流程和孤兒進程?

如何在單一C程式中執行殭屍流程和孤兒進程?

WBOY
WBOY轉載
2023-08-25 16:21:061327瀏覽

如何在單一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</p><p>", 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</p><p>", getpid(), getppid());
         while(1)
            sleep(1);
         printf("Inside Child---- PID of parent : %d</p><p>", getppid());
      }else if (x == 0)
      printf("Inside grandchild process---- PID of parent : %d</p><p>", 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:~$

以上是如何在單一C程式中執行殭屍流程和孤兒進程?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除