進程控制編程——Linux編程


1、進程的創建

    編寫一段程序,使用系統調用fork( )創建兩個子進程,在系統中有一個父進程和兩個子進程活動。讓每個進程在屏幕上顯示一個字符;父進程顯示字符“a”,子進程分別顯示字符“b” 和“c”。試觀察記錄屏幕上的顯示結果,並分析原因。

   

 1  # include<stdio.h>
 2 
 3     main()
 4 
 5     { int  p1, p2;
 6 
 7     while((p1=fork())= = -1);
 8 
 9     if(p1= =0)
10 
11     putchar(‘b’);
12 
13     else
14 
15       { while((p2=fork())= =-1);
16 
17         if(p2= =0)
18 
19         putchar(‘c’);
20 
21         else
22 
23         putchar( ‘a’);
24 
25        }
26 
27      } 

 

2、 修改已編寫的程序,將每個進程的輸出由單個字符改為一句話,再觀察程序執行時屏幕上出現的現象,並分析其原因。

 

 1 # include<stdio.h>
 2     main()
 3     { int  p1, p2, i;
 4       while((p1=fork())= = -1);
 5       if(p1= =0)
 6         for(i=0;i<500;i++) 
 7         printf(“child%d\n”,i);
 8       else
 9        { while((p2=fork())= =-1);
10          If(p2= =0)
11             for(i=0;i<500;i++) 
12             printf(“son%d\n”,i);
13          else 
14             for(i=0;i<500;i++) 
15             printf(“daughter%d\n”,i);
16         }
17     }

 

 

3、編寫程序創建進程樹如圖1和圖2所示,在每個進程中顯示當前進程識別碼和父進程識別碼。

 

圖一

#include<stdio.h>
//#include<sys/types.h> /* 提供類型pid_t的定義 */
#include<unistd.h> /* 提供函數的定義 */
int main()
{ 
int  p1,p2,p3;
while((p1=fork())== -1);
if(p1==0)
{
  while((p2=fork())==-1);        
       if(p2==0)
   {
          while((p3=fork())==-1);        
             if(p3==0)
      {
 //      putchar('d');
       printf("I am D,My pid is %d, my parent's pid is %d\n", getpid(), getppid());
      }
              else
      {
 //      putchar('c');
       printf("I am C,My pid is %d, my parent's pid is %d\n", getpid(), getppid());
      }
   }
      else
   {
 //    putchar('b');
      printf("I am B,My pid is %d, my parent's pid is %d\n", getpid(), getppid());
   }
}
else
{
//putchar('a');
printf("I am A,My pid is %d\n", getpid());
}
printf("\n");
getchar();
} 

 

圖二

#include<stdio.h>
#include<sys/types.h> /* 提供類型pid_t的定義 */


#include<unistd.h> /* 提供函數的定義 */
int main()
{ 
       int p1_B,p1_C,p2_D,p2_E;
       while((p1_B=fork())== -1);
       if(p1_B==0)
   {
     printf("I am B,My pid is %d, my parent's pid is %d\n", getpid(), getppid());
              while((p1_C=fork())== -1);
              if(p1_C==0)
        printf("I am C,My pid is %d, my parent's pid is %d\n", getpid(), getppid());
    }
      else 
     {
      printf("I am A,My pid is %d\n",getpid());
                while((p2_D=fork())==-1);
               if(p2_D==0)
       {
          printf("I am D,My pid is %d, my parent's pid is %d\n", getpid(), getppid());
                      while((p2_E=fork())== -1);
                     if(p2_E==0)
         printf("I am E,My pid is %d, my parent's pid is %d\n", getpid(), getppid());
       }
}
getchar();
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM