Linux下C編程:關於進程等待

來源:互聯網
上載者:User
#include <sys/types.h>      #include <stdio.h>      #include <sys/wait.h>                 void check_exit(int status);                 main()      {          pid_t pid;          int status;          if((pid = fork()) < 0)          {          printf("fork error!!\n");          exit(0);          }          else if(pid == 0)          {          printf("child process exit\n");            exit(0);          }          else     {              if(wait(&status) != pid)              {              printf("wait error!!");              exit(0);              }              check_exit(status);          }                 }      void check_exit(int status)      {          if(WIFEXITED(status))              printf("eixt\n");                         else if(WIFSIGNALED(status))              printf("killed by signal\n");          else if(WIFSTOPPED(status))              printf("stopped by signal\n");          else if(WIFCONTINUED(status))              printf("continued");      }

等待進程改變其狀態。所有下面哪些調用都被用於等待子進程狀態的改 變,擷取狀態已改變的子進程資訊。狀態改變可被認為是:1.子進程已終止。2.訊號導致子進程停止執行。3.訊號恢複子進程的執行。在子進程終止的情況 下,wait調用將允許系統釋放與子進程關聯的資源。如果不執行wait,終止了的子進程會停留在"zombie"狀態。

如果發現子進程改變了狀態,這些調用會立即返回。反之,調用會被阻塞直到子進程狀態改變,或者由訊號處理控制代碼所中斷(假如系統調用沒有通過sigaction的SA_RESTART標誌重啟動)。

wait 系統調用掛起當前執行中的進程,直到它的一個子進程終止。waitpid掛起當前進程的執行,直到指定的子進程狀態發生變化。預設,waitpid只等待 終止狀態的子進程,但這種行為可通過選項來改變。waitid系統調用對於等待哪個子進程狀態改變提供了更精確的控制。
 
子進程已終 止,父進程尚未對其執行wait操作,子進程會轉入“僵死”狀態。核心為“僵死”狀態的進程保留最少的資訊量(進程標識,終止狀態,資源使用資訊),過後 父進程執行wait時可以擷取子進程資訊。只要僵死的進程不通過wait從系統中移去,它將會佔據核心進程表中的一個欄位。如果進程表被填滿,核心將不能 再產生新進程。如果父進程已終止,它的僵死子進程將由init進程收養,並自動執行wait將它們移去。

wait(等待子進程中斷或結束)

#include<sys/types.h>                 #include<sys/wait.h>                 pid_t wait (int * status);

函數說明

;wait()會暫時停止目前進程的執行(掛起父進程),直到有訊號來到或子進程結束。如果在調用 wait()時子進程已經結束,則 wait()會立即返回子進程結束狀態值。子進程的結束狀態值會由參數 status 返回,而子進程的進程識別碼也會一快返回。如果不在意結束狀態值,則參數 status 可以設成 NULL。如果調用wait的進程沒有子進程則會調用失敗,子進程的結束狀態值請參考 waitpid( )    

如果執行成功則返回子進程識別碼(PID),如果有錯誤發生則返回-1。失敗原因存於errno 中。

查看全套文章:http://www.bianceng.cn/Programming/C/201212/34807.htm

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.