程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 孤兒進程與僵屍進程[二]

孤兒進程與僵屍進程[二]

編輯:關於C語言

 

在UNIX 系統中,一個子進程結束了,但是他的父進程沒有等待(調用wait / waitpid)他, 那麼這個子進程將變成一個僵屍進程。 但是如果該進程的父進程已經先結束了,那麼該進程就不會變成僵屍進程, 因為每個進程結束的時候,系統都會掃描當前系統中所運行的所有進程, 看有沒有哪個進程是剛剛結束的這個進程的子進程,如果是的話,就由Init (進程號為1)來接管他,成為他的父進程,此時稱這個進程為孤兒進程,其狀態收集工作由init進程負責。

 

以下是僵屍進程的示例程序,在此程序中,父進程讓子進程退出但不處理,然後父進程調用system函數列出當前前台進程信息,其源代碼如下:

 

 

#include <unistd.h> 

#include <stdio.h> 

#include <stdlib.h> 

main() 

    pid_t pid; 

    if((pid=fork)==-1) 

    perror("fork"); 

    else if(pid == 0) { 

        printf("child_pid pid=%d,ppid=%d\n",getpid());//打印pid

exit(0);

     } 

    sleep(3);

    system("ps");

    exit(0)

以上程序的編譯運行結果為:

child_pid pid=1108

PID   TTY   TIME      CMD

847   pts/1 00:00:00  bash

1107 pts/1 00:00:00  a.out

1108 pts/1 00:00:00 a.out<defunct>

1109 pts/1 00:00:00 ps摘自 日新為道的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved