有這樣一段**,分別在父程序和子程序中返回fork()的返回值,以及當前程序pid和父程序pid
#include
#include
#include
#include
int t;
pid_t pid;
void
print()
intmain()
else
if(pid ==0)
else
return0;
}
列印出來的資訊為
father pid is 3081
getpid is 3080
getppid is 2790
child pid is 0
getpid is 3081
getppid is 1
fork()在建立完子程序後,會有兩次返回,父程序中,fork返回值為子程序號》0。子程序中,fork返回值為0;
getpid()返回當前程序本身的pid。
getppid()返回當前程序的父程序pid。
分析上面列印輸出可以看到:父程序中,fork返回了子程序pid3081,而父程序本身pid為3080,父程序的父程序,pid為2790。子程序中,fork返回了0,而子程序本身的pid為3081,子程序的父程序pid為1
這裡可能會有乙個疑問,子程序的getppid返回值應該為3080,為什麼會是1呢?上網查證後發現,原來是由於父程序提前結束,導致子程序沒了「爹」,變成孤兒程序,所以被inti程序接管,inti程序的程序號即為1.
修改上述**,在父程序結尾增加sleep(1),掛起一秒,即讓子程序先結束,列印資訊如下。
father pid is 3166
getpid is 3165
getppid is 2790
child pid is 0
getpid is 3166
getppid is 3165
這次子程序的getppid就是父程序號了 Linux 初識程序!!!
概念 程式的乙個執行例項。在linux裡面有專門用來描述程序狀態的結構task struct,在系統核心裡面。這個通常被稱為pcb,著這個裡面包含著這個程序的所有資訊。pid 在描述程序的結構體pcb裡面有乙個pid,這個是描述程序id的,通過這個id就可以用來區分父程序和子程序。另外,getpid...
Linux系統 程序概念初識
所有的裝置都是圍繞儲存器工作的 cpu 控制器 運算器 1.cpu不會直接從輸入裝置獲取資料進行處理,而是先把資料放到儲存器中,cpu從儲存器中獲取資料處理。2.cpu不會直接將資料交給輸出裝置進行輸出,而是先把資料報道儲存器中,控制輸出裝置從儲存器中獲取資料輸出 2.1什麼是作業系統?2.2什麼是...
Linux 學習筆記(1) 初識Linux
linux分為核心版本與髮型版本,核心版本由官方 www.kernel.org發布,核心版本說明2 主版本 6 次版本 18 末版本 在使用中,是越穩定越安全的越好,而新版本一般是用於實驗 而發行版本,在核心版本基礎上經過修飾,成為了不同的髮型版本。linux中的開源軟體,使用自由 研究自由 散布及...