久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

學習pid進程以及fork()

 python_lover 2022-05-20 發(fā)布于北京

學習linux期間,看到一個語句  pid_t pid = fork();

想要理解pid_t 與 fork() 的意義為何,。

pid_t是一個數(shù)據(jù)類型,,定義的類型是進程號id,fork()函數(shù)則返回一個id號

pid_t需要頭文件 <sys/types.h> 支持

分析一波

 

 

 

 

運行結(jié)果如下圖

 

 

 運行發(fā)現(xiàn),,在執(zhí)行了上面7次后,,又運行了兩次

從運行結(jié)果開始分析fork()

1)父進程初始化

2)父進程調(diào)用了fork(),fork為系統(tǒng)調(diào)用,,進入內(nèi)核

3)內(nèi)核根據(jù)父進程復(fù)制一個子進程,,父子兩個進程信息一樣,代碼和數(shù)據(jù)也相同,,所以都會執(zhí)行接下來的語句,,如圖

 

 4)兩個進程都進入內(nèi)核然后等待從內(nèi)核中返回,但是究竟是父進程先返回還是子進程先返回呢,,就取決于內(nèi)核的調(diào)度算法了

5)當父進程被調(diào)度時,,pid變量被fork()賦予的值是子進程的id,是大于0的,,所以就調(diào)用第二個message賦值,,并執(zhí)行3次for循環(huán)

6)如果某時刻子進程被調(diào)用了,就會從內(nèi)核中被返回,,返回的值是0,,就會執(zhí)行第一個message賦值,并執(zhí)行6次for循環(huán),。(在這個過程中,,兩個進程對于message與n變量的賦值是互不影響的)

7)父進程打印一次睡眠1秒,在這1秒中子進程很可能被調(diào)度,,子進程打印一次也休眠1秒,,又有可能調(diào)度父進程,所以基本上是父子進程輪流調(diào)度打印,。如果將sleep去掉,,結(jié)果是:

 

 就會發(fā)現(xiàn)是父進程執(zhí)行結(jié)束后子進程才有被調(diào)度的空間

8)這個程序是在shell下運行的,shell也是一個進程,,而且是父進程的父進程,,在父進程結(jié)束之后,shell會認為進程結(jié)束了,,然后打印shell提示符,,然而此時子進程還在運行,所以才會在shell提示符后輸出信息

 

總結(jié):

fork()函數(shù)的特點是“調(diào)用一次,,返回兩次,,父進程中調(diào)用一次,父子進程中返回兩次,,本來是一個控制流程的程序,,在調(diào)用fork()函數(shù)之后會裂開變?yōu)閮蓚€控制流程,'fork'為“派生,、分支”,,父進程的fork返回的是子進程的id,子進程中的fork返回的是0

 

12/12/20 DJ

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多