久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

進(jìn)程控制:linux中fork同時創(chuàng)建多個子進(jìn)程注意事項(xiàng)

 mediatv 2014-12-03

/******************************************************************************************************************

參考:http://blog.sina.com.cn/s/blog_605f5b4f0100x444.html

說明:linux中fork同時創(chuàng)建多個子進(jìn)程注意事項(xiàng)

******************************************************************************************************************/ 

            也算實(shí)驗(yàn)出來了吧,,不過還好有網(wǎng)絡(luò),,不然好多自己解決不了的問題真就解決不了了,。我先寫了個這樣的創(chuàng)建多個子進(jìn)程的程序(模仿書上創(chuàng)建一個進(jìn)程的程序):

  1. #include <stdio.h>  
  2. #include <sys/types.h>  
  3. #include <sys/wait.h>  
  4. #include <stdlib.h>  
  5.   
  6. int main(void)  
  7. {  
  8.     pid_t childpid1, childpid2, childpid3;  
  9.     int status;  
  10.     int num;  
  11.     childpid1 = fork();  
  12.     childpid2 = fork();  
  13.     childpid3 = fork();  
  14.     if( (-1 == childpid1)||(-1 == childpid2)||(-1 == childpid3))  
  15.     {  
  16.         perror("fork()");  
  17.         exit(EXIT_FAILURE);  
  18.     }  
  19.     else if(0 == childpid1)  
  20.     {  
  21.         printf("In child1 process\n");  
  22.         printf("\tchild pid = %d\n", getpid());  
  23.         exit(EXIT_SUCCESS);  
  24.     }  
  25.         else if(0 == childpid2)  
  26.         {  
  27.             printf("In child2 processd\n");  
  28.             printf("\tchild pid = %d\n", getpid());  
  29.             exit(EXIT_SUCCESS);  
  30.         }  
  31.             else if(0 == childpid3)  
  32.             {  
  33.                 printf("In child3 process\n");  
  34.                 printf("\tchild pid = %d\n", getpid());  
  35.                 exit(EXIT_SUCCESS);  
  36.             }  
  37.                 else  
  38.                 {  
  39.                     wait(NULL);  
  40.                     puts("in parent");  
  41.             //      printf("\tparent pid = %d\n", getpid());  
  42.             //      printf("\tparent ppid = %d\n", getppid());  
  43.             //      printf("\tchild process exited with status %d \n", status);  
  44.                 }  
  45.     exit(EXIT_SUCCESS);  
  46.       
  47. }  

結(jié)果搞出兩個僵尸來,怎么都想不明白,,最后在網(wǎng)上找到了答案,。并來回揣摩出來了方法和注意事項(xiàng):
  1. #include <stdio.h>  
  2. #include <sys/types.h>  
  3. #include <sys/wait.h>  
  4. #include <stdlib.h>  
  5.   
  6. int main(void)  
  7. {  
  8.     pid_t childpid1, childpid2, childpid3;  
  9.     int status;  
  10.     int num;  
  11.       
  12.     /* 這里不可以一下就創(chuàng)建完子進(jìn)程,要用 
  13.     *要 創(chuàng)建-》判斷-》使用-》return or exit.更不能這樣如test2.c 
  14.     *childpid1 = fork(); 
  15.     *childpid2 = fork(); 
  16.     *childpid3 = fork(); 
  17.     */  
  18.     childpid1 = fork();                                             //創(chuàng)建  
  19.     if(0 == childpid1)                                              //判斷  
  20.     {                                                                                   //進(jìn)入  
  21.         printf("In child1 process\n");  
  22.         printf("\tchild pid = %d\n", getpid());  
  23.         exit(EXIT_SUCCESS);                                         //退出  
  24.     }  
  25.     childpid2 = fork();  
  26.     if(0 == childpid2)  
  27.     {  
  28.         printf("In child2 processd\n");  
  29.         printf("\tchild pid = %d\n", getpid());  
  30.         exit(EXIT_SUCCESS);  
  31.     }  
  32.     childpid3 = fork();  
  33.     if(0 == childpid3)  
  34.     {  
  35.         printf("In child3 process\n");  
  36.         printf("\tchild pid = %d\n", getpid());  
  37.         exit(EXIT_SUCCESS);  
  38.     }  
  39.     //這里不可以用wait(NULL),,多個子進(jìn)程是不可以用wait來等待的,,它只會等待一個 其它都成僵尸了  
  40.     waitpid(childpid1, NULL, 0);  
  41.     waitpid(childpid2, NULL, 0);  
  42.     waitpid(childpid3, NULL, 0);  
  43.     puts("in parent");  
  44.   
  45.     exit(EXIT_SUCCESS);  
  46.       
  47. }  

嚴(yán)格照著這樣做就不會出現(xiàn) 僵尸,也不會影響其它進(jìn)程,。

創(chuàng)建-》判斷-》使用-》return or exit.



    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多