[1]什么是進程標識符
系統(tǒng)給每個進程定義了一個唯一標識該進程的非負整數(shù),稱作進程標識符(PID:Process Identifier)。
[2]程序和進程的關(guān)系
程序--靜態(tài)的概念
一個編譯出來的可執(zhí)行文件,它是一些保存在磁盤上的指令的有序集合,沒有任何執(zhí)行的概念。比如我們的a.out就是一個可執(zhí)行程序。
進程--動態(tài)的概念
a.out要執(zhí)行,這樣的執(zhí)行過程是一個動態(tài)的,需要把這些可執(zhí)行的程序指令搬運到內(nèi)存中,進行一些內(nèi)存的資源,這就是進程。也可以理解為"正在運行的程序"。
同一個程序文件可以被加載多次成為不同的進程,每次產(chǎn)生進程,操作系統(tǒng)就會為其分配一個唯一的標識符來標識這個進程。因此,進程與進程標識符之間是一對一的關(guān)系,而與程序之間是多對一的關(guān)系。
[3]怎么查看進程標識符
在linux操作系統(tǒng)shell中,我們可以通過ps命令查看當前系統(tǒng)下正在運行的進程信息。
第一列內(nèi)容是進程標識符(PID),這個標識符是唯一的;最后一列內(nèi)容是進程的程序文件名。我們可以從中間找到有多個進程對應同一個程序文件名的情況,這是因為有一些常用的程序被多次運行了,比如bash等。
[4]程序中怎么獲取當前進程的進程ID
#include
pid_t getpid(void); //獲取進程ID
應用舉例:
#include
#include
int main(void)
{
printf("PID: %u\n", getpid());
return 0;
}
[5]程序的父進程ID
在linux操作系統(tǒng)中,有一個init進程,作為整個操作系統(tǒng)的最開始的進程,然后這個進程去創(chuàng)建子進程,子進程再層層創(chuàng)建下去形成當前l(fā)inux系統(tǒng)可以使用的多個進程的環(huán)境。也就是說,除了init進程外,所有的進程,都有自己的父進程。
下圖是通過pstree -p命令顯示出當前系統(tǒng)下所有進程的樹型關(guān)系,通過這個圖我們也能清晰的看到每個進程它的父進程是誰。
[6]程序中怎么獲取當前進程的父進程ID
#include
pid_t getppid(void); //獲取進程ID
應用舉例:
#include
#include
int main(void)
{
printf("PPID: %u\n", getppid());
return 0;
}