學習Linux命令 - 等一下

名稱

等待,waitpid - 等待進程終止

概要

#include
#include

pid_t wait(int * status );
pid_t waitpid(pid_t pid ,int * status ,int options );

描述

等待函數暫停當前進程的執行,直到孩子退出,或者直到一個信號被傳遞,其行動是終止當前進程或調用信號處理函數。 如果一個孩子在通話結束時已經退出(所謂的“殭屍”進程),該函數立即返回。 任何由孩子使用的系統資源都將被釋放。

waitpid函數暫停當前進程的執行,直到由pid參數指定的子進程退出,或者直到傳遞了一個信號,該信號的作用是終止當前進程或調用信號處理函數。 如果在pid請求的孩子已經退出通話時(所謂的“殭屍”進程),該函數立即返回。 任何由孩子使用的系統資源都將被釋放。

pid的值可以是下列之一:

<-1

意味著等待進程組ID等於pid絕對值的任何子進程。

-1

這意味著等待任何兒童進程; 這是等待展品的行為。

0

這意味著等待進程組ID等於調用進程的任何子進程。

> 0

這意味著等待進程ID等於pid值的子進程。

選項的值是零個或多個以下常量的或:

WNOHANG

這意味著如果沒有孩子退出就立即返回。

WUNTRACED

這意味著還要為已停止的兒童返回,而且其狀態尚未報告。

(僅適用於Linux,請參閱下文。)

如果狀態不為NULL ,則在狀態指向的位置等待waitpid存儲狀態信息。

這個狀態可以用下面的宏來評估(這些宏將stat緩衝區(一個int )作為參數---不是指向緩衝區的指針!):

WIFEXITED( 狀態

如果孩子正常退出,則不為零。

WEXITSTATUS( 狀態

評估為終止的子代碼的最低有效位8位,它可能已被設置為對exit()的調用的參數或者作為主程序中的返回語句的參數。 只有在WIFEXITED返回非零值時才能評估此宏。

WIFSIGNALED( 狀態

如果子進程由於未捕獲到的信號而退出,則返回true。

WTERMSIG( 狀態

返回導致子進程終止的信號的編號。 只有在WIFSIGNALED返回非零值時才能評估此宏。

WIFSTOPPED( 狀態

如果導致返回的子進程當前停止,則返回true; 這只有在使用WUNTRACED完成呼叫時才有可能。

WSTOPSIG( 狀態

返回導致孩子停止的信號的數量。 只有在WIFSTOPPED返回非零值時才能評估此宏。

一些版本的Unix(例如Linux,Solaris,但不是AIX,SunOS)也定義了一個宏WCOREDUMP( status 來測試子進程是否轉儲核心。 只能在#ifdef WCOREDUMP ... #endif中使用。

返回值

退出的子進程ID,如果使用WNOHANG且沒有可用的子進程,則為零,或者錯誤時為-1(在這種情況下,將errno設置為適當的值)。

錯誤

ECHILD

如果過程中指定 pid不存在或不是調用進程的子進程。 (如果將SIGCHLD的操作設置為SIG_IGN,則可能發生在自己的孩子身上,另請參閱關於線程的LINUX NOTES部分。)

EINVAL

如果選項參數無效。

EINTR

如果沒有設置WNOHANG ,並且未捕獲信號或SIGCHLD被捕獲。