進程標識(shi)符詳解(jie),讓你對(dui)進程標識(shi)符有深入理(li)解(jie)
時間:2018-06-26 來源:未知
[1]什么(me)是進程標(biao)識符
系(xi)統給每個進(jin)程定義了一個唯一標識(shi)(shi)該進(jin)程的非負整數,稱(cheng)作進(jin)程標識(shi)(shi)符(PID:Process Identifier)。
[2]程序和(he)進程的關系(xi)
程(cheng)序--靜態(tai)的概念
一(yi)個編譯(yi)出來的(de)可執(zhi)行文件,它是一(yi)些保(bao)存在磁盤(pan)上的(de)指令(ling)的(de)有序(xu)(xu)集合,沒有任何(he)執(zhi)行的(de)概(gai)念。比如(ru)我們的(de)a.out就是一(yi)個可執(zhi)行程序(xu)(xu)。
進(jin)程(cheng)--動(dong)態的概念
a.out要(yao)(yao)執(zhi)(zhi)行(xing),這(zhe)樣(yang)的(de)執(zhi)(zhi)行(xing)過程(cheng)是(shi)一(yi)個動態的(de),需要(yao)(yao)把(ba)這(zhe)些(xie)可(ke)執(zhi)(zhi)行(xing)的(de)程(cheng)序指令(ling)搬(ban)運到內存中,進(jin)行(xing)一(yi)些(xie)內存的(de)資源,這(zhe)就是(shi)進(jin)程(cheng)。也可(ke)以理解(jie)為"正(zheng)在運行(xing)的(de)程(cheng)序"。
同一個程(cheng)(cheng)序(xu)文件可以(yi)被加載多(duo)次成為不同的進程(cheng)(cheng),每次產生進程(cheng)(cheng),操作系統(tong)就會為其(qi)分配一個唯一的標識符(fu)(fu)來標識這(zhe)個進程(cheng)(cheng)。因此,進程(cheng)(cheng)與(yu)進程(cheng)(cheng)標識符(fu)(fu)之(zhi)間是一對一的關(guan)系,而與(yu)程(cheng)(cheng)序(xu)之(zhi)間是多(duo)對一的關(guan)系。

[3]怎么查看進程標識符
在linux操作系(xi)統shell中,我們可以通過(guo)ps命(ming)令查(cha)看當前(qian)系(xi)統下(xia)正在運行的(de)進程信息。

第(di)一(yi)(yi)(yi)列內容是(shi)進程(cheng)標識符(fu)(PID),這(zhe)(zhe)個標識符(fu)是(shi)唯一(yi)(yi)(yi)的(de)(de);最后(hou)一(yi)(yi)(yi)列內容是(shi)進程(cheng)的(de)(de)程(cheng)序文(wen)件名。我們可以從中間找(zhao)到有(you)多個進程(cheng)對(dui)應同一(yi)(yi)(yi)個程(cheng)序文(wen)件名的(de)(de)情況,這(zhe)(zhe)是(shi)因(yin)為有(you)一(yi)(yi)(yi)些(xie)常用(yong)的(de)(de)程(cheng)序被多次(ci)運行了,比如bash等。
[4]程(cheng)(cheng)序中怎(zen)么獲(huo)取當前(qian)進程(cheng)(cheng)的進程(cheng)(cheng)ID
#include
pid_t getpid(void); //獲取進程ID
應用舉例:
#include
#include
int main(void)
{
printf("PID: %u\n", getpid());
return 0;
}
[5]程(cheng)序的父進程(cheng)ID
在(zai)linux操(cao)作系(xi)統中,有一(yi)個init進(jin)(jin)(jin)程(cheng)(cheng)(cheng),作為整個操(cao)作系(xi)統的(de)最開始(shi)的(de)進(jin)(jin)(jin)程(cheng)(cheng)(cheng),然后(hou)這個進(jin)(jin)(jin)程(cheng)(cheng)(cheng)去創(chuang)建子進(jin)(jin)(jin)程(cheng)(cheng)(cheng),子進(jin)(jin)(jin)程(cheng)(cheng)(cheng)再(zai)層(ceng)層(ceng)創(chuang)建下去形成(cheng)當前(qian)linux系(xi)統可以(yi)使用的(de)多個進(jin)(jin)(jin)程(cheng)(cheng)(cheng)的(de)環境。也就是說(shuo),除了init進(jin)(jin)(jin)程(cheng)(cheng)(cheng)外,所有的(de)進(jin)(jin)(jin)程(cheng)(cheng)(cheng),都(dou)有自己的(de)父(fu)進(jin)(jin)(jin)程(cheng)(cheng)(cheng)。
下圖(tu)是通過pstree -p命令(ling)顯示出當前系(xi)統下所有進(jin)程(cheng)(cheng)的樹型關系(xi),通過這(zhe)個(ge)(ge)圖(tu)我們也能清晰的看到(dao)每個(ge)(ge)進(jin)程(cheng)(cheng)它的父進(jin)程(cheng)(cheng)是誰。

[6]程序中怎么獲取當前進程的父進程ID
#include
pid_t getppid(void); //獲取進程ID
應用舉例:
#include
#include
int main(void)
{
printf("PPID: %u\n", getppid());
return 0;
}