每個進程都有一個非負整型表示的唯一進程ID。因為進程ID標識符總是唯一的,常將其用作其他標識符的一部分以保證其唯一性。例如,應用程序有時就把進程ID作為名字的一部分來創建一個唯一的文件名。
雖然是唯一的,但是進程ID可以重用。當一個進程終止后,其進程ID就可以再次使用了。大多數UNIX系統實現延遲重用算法,使得賦予新建進程的ID不同於最近終止進程所使用的ID。這防止了將新進程誤認為是使用同一ID的某個已終止的先前進程。
系統中有一些專用的進程,但具體細節因實現而異。ID為0的進程通常是調度進程,常常被稱為交換進程(swapper)。該進程是內核的一部分,它並不執行磁盤上的任何程序,因此也被稱為系統進程。進程ID 1通常是init進程,在自舉(bootstrap)過程結束時由內核調用。此進程負責在自舉內核后啟動一個UNIX系統。init通常讀與系統有關的初始化文件(/etc/rc*文件或/etc/inittab文件,以及/etc/init.d中的文件),並將系統引導到一個狀態(例如多用戶)。init進程絕不會終止。它是一個普通的用戶進程(與交換進程不同,它不是內核中的系統進程),但是它以超級用戶特權運行。
除了進程ID,每個進程還有一些其他的標識符。下列函數返回這些標識符。
#include <unistd.h> pid_t getpid( void ); 返回值:調用進程的進程ID pid_t getppid( void ); 返回值:調用進程的父進程ID uid_t getuid( void ); 返回值:調用進程的實際用戶ID uit_t geteuid( void ); 返回值:調用進程的有效用戶ID gid_t getgid( void ); 返回值:調用進程的實際組ID gid_t getegid( void ); 返回值:調用進程的有效組ID
注意,這些函數都沒有出錯返回。
本篇博文內容摘自《UNIX環境高級編程》(第二版),僅作個人學習記錄所用。關於本書可參考:http://www.apuebook.com/。