關於進程控制和管理的幾點

  進程創建:


               不同的操作系統創建進程的方式不盡相同,對於傳統 UNIX系統中是這樣處理的:父進程使用fork()創建子進程。Linux保留傳統的fork()創建子進程;創建後,父子進程存在以下關係:調用一次,返回兩次,分別返回父子進程;父子進程是獨立的進程,可以併發執行;父子進程具有獨立的地址空間,如果父子進程改變某個變量的值,子進程將不會看到這個變化,反之 亦然,因爲 父子進程在相互獨立的地址空間中併發執行。

               另一個系統調用是vfork(),它允許子進程借用父進程的地址空間,父進程將被阻塞至子進程執行execve()或exit(),向父進程歸還地址空間並喚醒它。


[程序:fork()函數相關]


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{
   pid_t result;
   result = fork();
   int newret;
   int i=1;   //用於測試父子進程之間的獨立性
   if(result == -1)
   {
      perror("創建子進程失敗!");
      exit;
   }
   else if(result == 0)
   {
      printf("返回傎是:%d/n,i的值是:%d/n說明是子進程:/n此進程的進程號是:%d/n此進程的父進程是:%d/n",result,i+1,getpid(),getppid());
      newret = system("ls -l");
   }
   else
   {
       sleep(10);   //休眠10秒
       printf("返回傎是:%d/n,i的值是:%d/n說明是父進程:/n此進程的進程號是:%d/n此進程的父進程是:%d/n",result,i,getpid(),getppid());
       newret = system("ls -al");    
   }
}

 

          程序中,先用fork()創建一個進程。再分別顯示子/父進程的進程號和其父進程號,當result返回0時說明是新創建的進程號,而當result返回一個進程號時(不是-1和0),說明是父進程。而在子進程中的i自加1時,對於父進程並沒有影響。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章