一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

關(guān)于進(jìn)程的代碼練習(xí) fork daemon

 心不留意外塵 2016-07-07
http://blog./uid-27164517-id-3307949.html
2012
一個關(guān)于fork的思考

點擊(此處)折疊或打開

  1. #include<stdio.h>
  2. #include<sys/types.h>
  3. #include<unistd.h>
  4. int i=5;

  5. int main()
  6. {
  7.     int j;
  8.     pid_t pid;
  9.     //pid = fork();//子進(jìn)程是從fork后的語句開始執(zhí)行的,所以這樣起不到創(chuàng)建兩個子進(jìn)程的效果
  10. for(j=0; j<2; j++)
  11. {
  12.     //pid = fork();//請思考為什么fork不能放在循環(huán)里,
  13.     pid = vfork();//請比較此例中創(chuàng)建兩個子進(jìn)程和下例中用遞歸創(chuàng)建有什么不同
  14.     switch(pid)
  15.     {
  16.         case 0:
  17.             i++;
  18.             printf("CP is run\n");
  19.             printf("%d\n%d\n",i,getpid());
  20.             break;
  21.         case -1:
  22.             perror("pc failed");
  23.             break;
  24.         default:
  25.             printf("PP is run\n");
  26.             printf("%d\n%d\n",i,getpid());
  27.             break;
  28.     }

  29. }
  30. exit(0);
  31. }
遞歸,可創(chuàng)建多個子進(jìn)程

點擊(此處)折疊或打開

  1. #include<stdio.h>
  2.     #include<stdlib.h>
  3.     #include<unistd.h>
  4.       
  5.     pid_t pid;
  6.       
  7.     /*
  8.      * num:當(dāng)前已經(jīng)創(chuàng)建的子進(jìn)程數(shù)
  9.      * max:需要創(chuàng)建的子進(jìn)程數(shù)
  10.      */
  11.     void createsubprocess(int num,int max)
  12.     {
  13.         if(num>=max)return;
  14.         pid=fork();
  15.         if(pid<0)
  16.         {
  17.             perror("fork error!\n");
  18.             exit(1);
  19.         }
  20.         //子進(jìn)程
  21.         else if(pid==0)
  22.         {
  23.             sleep(3);
  24.             printf("子進(jìn)程id=%d,父進(jìn)程id=%d\n",getpid(),getppid());
  25.         }
  26.         //父進(jìn)程
  27.         else
  28.         {
  29.             num++;
  30.             if(num==1)printf("父進(jìn)程id=%d\n",getpid());
  31.             if(num<max)createsubprocess(num,max);
  32.             //此處加sleep是為了防止父進(jìn)程先退出,從而產(chǎn)生異常
  33.             sleep(5);
  34.         }
  35.     }
  36.       
  37.     int main()
  38.     {
  39.         int num=0;
  40.         int max=3;
  41.         createsubprocess(num,max);
  42.         return 0;
  43.     }

創(chuàng)建守護(hù)進(jìn)程(遞歸)

點擊(此處)折疊或打開

  1. #include<stdio.h>
  2. #include<sys/types.h>
  3. #include<unistd.h>
  4. #include<signal.h>
  5. #include<sys/param.h>
  6. #include<sys/stat.h>
  7. #include<time.h>
  8. #include<syslog.h>

  9. int init_daemon(void)
  10. {
  11.     int pid;
  12.     int i;

  13.     signal(SIGTTOU,SIG_IGN);
  14.     signal(SIGTTIN,SIG_IGN);
  15.     signal(SIGTSTP,SIG_IGN);
  16.     signal(SIGHUP,SIG_IGN);
  17. //兩次創(chuàng)建子進(jìn)程,使得進(jìn)程不再是會話組長從而脫離控制終端
  18.     pid = fork();
  19.     if(pid>0)
  20.     {
  21.     exit(0);
  22.     }
  23.     else if(pid<0)
  24.     {
  25.         return -1;
  26.     }
  27.     setsid();
  28.     pid = fork;
  29.     if(pid>0)
  30.     {
  31.         exit(0);
  32.     }
  33.     else if(pid<0)
  34.     {
  35.         return -1;
  36.     }
  37. //關(guān)閉0到最高文件進(jìn)程描述符值
  38.     for(i=0; i<NOFILE; close(i++));

  39.     chdir("/");
  40.     
  41.     umask(0);

  42.     signal(SIGCHLD,SIG_IGN);

  43.     return 0;

  44. }

  45. int main()
  46. {
  47.     time_t now;
  48.     init_daemon();
  49.     syslog(LOG_USER | LOG_INFO,"測試守護(hù)進(jìn)程!\n");
  50.     while(1)
  51.     {
  52.         sleep(8);
  53.         time(&now);
  54.         syslog(LOG_USER | LOG_INFO,"系統(tǒng)時間:\t%s\t\t\n",ctime(&now));
  55.     }
  56. }

創(chuàng)建進(jìn)程扇/進(jìn)程鏈:

進(jìn)程扇:/* 由一個進(jìn)程派生多個子進(jìn)程 */
進(jìn)程鏈:/* 由父進(jìn)程派生子進(jìn)程,子進(jìn)程再派生子進(jìn)程 */

請思考3個問題:
1.怎樣保證父子進(jìn)程的執(zhí)行順序
2.sleep的作用到底是什么?
3.break能不能換成return(0)?它們之間有什么區(qū)別?

點擊(此處)折疊或打開

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <unistd.h>


  4. int main(void)
  5. {
  6.         int i;
  7.         pid_t pid;

  8.         printf("This is a example\n");
  9.         for (i=0 ;i<3; i++)
  10.         {
  11.                  if (!(pid = fork())  //創(chuàng)建進(jìn)程扇(讓子進(jìn)程跳出)
  12.              //  if ( pid = fork())  //創(chuàng)建進(jìn)程鏈(讓父進(jìn)程跳出,子進(jìn)程作為后繼的父進(jìn)程)
  13.                  break;
  14.         }
  15.         printf ("("My parent pid is %ld,My pid is %ld\n",getpid(),getppid());
  16.         sleep(3);//等待所有的進(jìn)程執(zhí)行完畢
  17.         return 0;
  18. }

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    精品人妻精品一区二区三区| 国产精品亚洲欧美一区麻豆 | 中文字幕中文字幕一区二区| 亚洲av熟女国产一区二区三区站| 久久99爱爱视频视频| 日本熟女中文字幕一区| 久久99这里只精品热在线| 欧美国产日韩变态另类在线看| 亚洲av日韩一区二区三区四区| 少妇在线一区二区三区| 日韩中文字幕在线不卡一区| 精品人妻少妇二区三区| 91插插插外国一区二区婷婷| 日本中文在线不卡视频| 中文字幕在线区中文色| 加勒比日本欧美在线观看| 国产精品一区二区视频大全| 亚洲高清中文字幕一区二三区| 国产亚洲系列91精品| 日韩精品日韩激情日韩综合| 99国产成人免费一区二区| 国产精品制服丝袜美腿丝袜| 欧美乱妇日本乱码特黄大片| 午夜午夜精品一区二区| 日韩性生活片免费观看| 久久精品一区二区少妇| 一区二区三区日韩中文| 国产无摭挡又爽又色又刺激| 午夜福利视频偷拍91| 国产精品久久久久久久久久久痴汉| 久久三级国外久久久三级| 中文字幕一区二区三区中文| 亚洲熟女一区二区三四区| 日韩丝袜诱惑一区二区| 亚洲一区二区三区一区| 日本精品免费在线观看| 国产爆操白丝美女在线观看| 日本不卡在线一区二区三区| 亚洲中文字幕日韩在线| 国产精品欧美激情在线| 精品人妻一区二区三区四在线 |