進程的pid和ppid能夠分別經過函數getpid()和getppid()得到。
示例: 函數
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
printf("pid:%d ppid:%d\n",getpid(),getppid());
return 0;
}
|
![]() |
進程在運行過程當中,必須具備一相似於用戶的身份,以便進行進程的權限控制,缺省狀況下,哪一個登陸用戶運行程序,該程序進程就具備該用戶的身份。例如,假設當前登陸用戶爲gotter,他運行了ls程序,則ls在運行過程當中就具備gotter的身份,該ls進程的用戶ID和組ID分別爲gotter和gotter所屬的組。這類型的ID叫作進程的真實用戶ID和真實組ID。真實用戶ID和真實組ID能夠經過函數getuid()和getgid()得到。
與真實ID對應,進程還具備有效用戶ID和有效組ID的屬性,內核對進程的訪問權限檢查時,它檢查的是進程的有效用戶ID和有效組ID,而不是真實用戶ID和真實組ID。缺省狀況下,用戶的(有效用戶ID和有效組ID)與(真實用戶ID和真實組ID)是相同的。有效用戶id和有效組id經過函數geteuid()和getegid()得到。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
printf("uid:%d gid:%d euid:%d egid:%d\n",getuid(),getgid(),geteuid(),getegid());
return 0;
}
|
進程是程序的執行過程,根據它的生命週期能夠劃分紅3種狀態。
l 執行態1 生命週期
l 就緒態:進程已經具有執行的一切條件,正在等待分配CPU的處理時間片。
l 等待態:進程不能使用CPU,若等待事件發生(等待的資源分配到)則可將其喚醒。
Linux中的進程包含3個段,分別爲「數據段」、「代碼段」和「堆棧段」。
●「數據段」 存放全局變量、常數以及動態數據分配的數據空間。數據段分紅普通數據段(包括可讀可寫/只讀數據段,存放靜態初始化的全局變量或常量)、BSS數據段(存放未初始化的全局變量)以及堆(存放動態分配的數據)。
●「堆棧段」 存放的是子程序的返回地址、子程序的參數以及程序的局部變量等。