<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-204  評論-149  文章-0  trackbacks-0
    waitpid(等待子進(jìn)程中斷或結(jié)束)
      表頭文件
      #include<sys/types.h>
      #include<sys/wait.h>
      定義函數(shù) pid_t waitpid(pid_t pid,int * status,int options);
      函數(shù)說明
      waitpid()會暫時停止目前進(jìn)程的執(zhí)行,直到有信號來到或子進(jìn)程
      結(jié)束。如果在調(diào)用 wait()時子進(jìn)程已經(jīng)結(jié)束,則 wait()會立即
      返回子進(jìn)程結(jié)束狀態(tài)值。 子進(jìn)程的結(jié)束狀態(tài)值會由參數(shù) status 返回,
      而子進(jìn)程的進(jìn)程識別碼也會一起返回。如果不在意結(jié)束狀態(tài)值,則
      參數(shù) status 可以設(shè)成 NULL。參數(shù) pid 為欲等待的子進(jìn)程識別碼,
      其他數(shù)值意義如下:
      pid<-1 等待進(jìn)程組識別碼為 pid 絕對值的任何子進(jìn)程。
      pid=-1 等待任何子進(jìn)程,相當(dāng)于 wait()。
      pid=0 等待進(jìn)程組識別碼與目前進(jìn)程相同的任何子進(jìn)程。
      pid>0 等待任何子進(jìn)程識別碼為 pid 的子進(jìn)程。
      參數(shù) option 可以為 0 或下面的 OR 組合:
      WNOHANG 如果沒有任何已經(jīng)結(jié)束的子進(jìn)程則馬上返回, 不予以等待。
      WUNTRACED 如果子進(jìn)程進(jìn)入暫停執(zhí)行情況則馬上返回,但結(jié)束狀態(tài)不予以理會。
      子進(jìn)程的結(jié)束狀態(tài)返回后存于 status,底下有幾個宏可判別結(jié)束情況:
      WIFEXITED(status)如果子進(jìn)程正常結(jié)束則為非 0 值。
      WEXITSTATUS(status)取得子進(jìn)程 exit()返回的結(jié)束代碼,一般會先用 WIFEXITED 來判斷是否正常結(jié)束才能使用此宏。
      WIFSIGNALED(status)如果子進(jìn)程是因?yàn)樾盘柖Y(jié)束則此宏值為真
      WTERMSIG(status) 取得子進(jìn)程因信號而中止的信號代碼,一般會先用 WIFSIGNALED 來判斷后才使用此宏。
      WIFSTOPPED(status) 如果子進(jìn)程處于暫停執(zhí)行情況則此宏值為真。一般只有使用 WUNTRACED 時才會有此情況。
      WSTOPSIG(status) 取得引發(fā)子進(jìn)程暫停的信號代碼,一般會先用 WIFSTOPPED 來判斷后才使用此宏。
      如果執(zhí)行成功則返回子進(jìn)程識別碼(PID) ,如果有錯誤發(fā)生則返回
      返回值-1。失敗原因存于 errno 中。
      /******
      * waitpid.c - Simple wait usage
      *********/
      #include <unistd.h>
      #include <sys/types.h>
      #include <sys/wait.h>
      #include <stdio.h>
      #include <stdlib.h>
      int main( void )
      {
      pid_t childpid;
      int status;
      childpid = fork();
      if ( -1 == childpid )
      {
      perror( "fork()" );
      exit( EXIT_FAILURE );
      }
      else if ( 0 == childpid )
      {
      puts( "In child process" );
      sleep( 3 );//讓子進(jìn)程睡眠3秒,看看父進(jìn)程的行為
      printf("\tchild pid = %d\n", getpid());
      printf("\tchild ppid = %d\n", getppid());
      exit(EXIT_SUCCESS);
      }
      else
      {
      waitpid( childpid, &status, 0 );
      puts( "in parent" );
      printf( "\tparent pid = %d\n", getpid() );
      printf( "\tparent ppid = %d\n", getppid() );
      printf( "\tchild process exited with status %d \n", status );
      }
      exit(EXIT_SUCCESS);
      }
      [root@localhost src]# gcc waitpid.c
      [root@localhost src]# ./a.out
      In child process
      child pid = 4469
      child ppid = 4468
      in parent
      parent pid = 4468
      parent ppid = 4379
      child process exited with status 0
      [root@localhost src]#
      如果將上面“waitpid( childpid, &status, 0 );”行注釋掉,程序執(zhí)行效果如下:
      [root@localhost src]# ./a.out
      In child process
      in parent
      parent pid = 4481
      parent ppid = 4379
      child process exited with status 1331234400
      [root@localhost src]# child pid = 4482
      child ppid = 1
      子進(jìn)程還沒有退出,父進(jìn)程已經(jīng)退出了。
    posted on 2009-07-05 00:01 Frank_Fang 閱讀(439) 評論(0)  編輯  收藏 所屬分類: Linux | ACE網(wǎng)絡(luò)編程
    主站蜘蛛池模板: 中文字幕在线免费看线人| 亚洲精品人成网线在线播放va | jlzzjlzz亚洲jzjzjz| 最近的2019免费中文字幕| 337p日本欧洲亚洲大胆裸体艺术| 美女裸免费观看网站| www国产亚洲精品久久久日本| 美女被爆羞羞网站免费| 免费日韩在线视频| 黄床大片30分钟免费看| 夜色阁亚洲一区二区三区| 欧亚一级毛片免费看| 久久久久无码专区亚洲av| 大地资源网高清在线观看免费| 亚洲国产精品无码久久久秋霞2| 免费一区二区无码东京热| 久久久久亚洲av无码专区蜜芽| 少妇太爽了在线观看免费视频| 亚洲精品亚洲人成在线观看麻豆| 成人片黄网站A毛片免费| 亚洲第一第二第三第四第五第六 | 四虎永久在线免费观看| 免费观看又污又黄在线观看| 中文字幕无码精品亚洲资源网| 免费黄网站在线看| 一级特黄录像视频免费| 国产亚洲精品无码专区| 久久亚洲免费视频| 中文文字幕文字幕亚洲色| 国产99视频免费精品是看6| 99免费在线视频| 亚洲国产高清美女在线观看| 成人毛片18女人毛片免费视频未| 免费国产a理论片| 亚洲首页在线观看| 16女性下面扒开无遮挡免费| 日本亚洲免费无线码 | 99久久这里只精品国产免费| 国产AV无码专区亚洲AV麻豆丫| 中文字幕亚洲乱码熟女一区二区 | 叮咚影视在线观看免费完整版|