日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

Linux中的进程创建函数fork

發(fā)布時(shí)間:2025/5/22 linux 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux中的进程创建函数fork 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??

Linux中的進(jìn)程通過(guò)fork創(chuàng)建,并通過(guò)exec執(zhí)行,分為兩步。

在Linux中所有的進(jìn)程都是pid為1的init進(jìn)程的子進(jìn)程,內(nèi)核在系統(tǒng)啟動(dòng)的最后階段啟動(dòng)init進(jìn)程。系統(tǒng)中的所有進(jìn)程都有一個(gè)父進(jìn)程,在進(jìn)程描述符中有指向父進(jìn)程的指針,具有同一個(gè)父進(jìn)程的進(jìn)程稱(chēng)為兄弟進(jìn)程,同時(shí)每個(gè)進(jìn)程描述符中還有一個(gè)成為children的子進(jìn)程鏈表。實(shí)際上你從系統(tǒng)中的任意一個(gè)進(jìn)程出發(fā)就可以找到任意另一個(gè)進(jìn)程。

Fork函數(shù)首先拷貝當(dāng)前進(jìn)程創(chuàng)建一個(gè)子進(jìn)程。此時(shí)區(qū)別僅僅在于Pid、ppid和一些系統(tǒng)資源的統(tǒng)計(jì)量不同。但是此處的拷貝為寫(xiě)時(shí)拷貝,因?yàn)橛行┵Y源可能并不是共享的。此時(shí)父進(jìn)程子進(jìn)程共享一個(gè)內(nèi)存地址空間。只有在寫(xiě)入的時(shí)候進(jìn)程才會(huì)進(jìn)行拷貝,使得每個(gè)進(jìn)程有一份自己的拷貝。Fork函數(shù)有三個(gè)返回值:-1表示失敗, 0表示子進(jìn)程中返回0, 子進(jìn)程pid則是父進(jìn)程中返回的子進(jìn)程pid。通過(guò)返回值判斷當(dāng)前進(jìn)程是子進(jìn)程還是父進(jìn)程。

Linux是通過(guò)clone()系統(tǒng)調(diào)用實(shí)現(xiàn)的fork函數(shù)。Clone()這個(gè)調(diào)用通過(guò)一系列的標(biāo)志來(lái)表明父子進(jìn)程共享的資源。然后clone調(diào)用do_fork()。do_fork()完成了創(chuàng)建的大部分工作,內(nèi)部通過(guò)調(diào)用copy_process讓進(jìn)程運(yùn)行:

1.在copy_process中,會(huì)通過(guò)調(diào)用dup_task_struct方法為子進(jìn)程分配內(nèi)核棧、ThreadInfo以及task_struct。此時(shí)子進(jìn)程與父進(jìn)程的描述符是一樣的。在dup_task_struct函數(shù)中:會(huì)為使用內(nèi)核的slab分配器去為所要?jiǎng)?chuàng)建的進(jìn)程分配struct_task_struct的空間。而alloc_thread_info使用內(nèi)核的伙伴系統(tǒng)去為所要?jiǎng)?chuàng)建的進(jìn)程分配內(nèi)核棧union-thread-union)空間。2.子進(jìn)程使自己與父進(jìn)程不用,通過(guò)alloct_pid為子進(jìn)程分配一個(gè)進(jìn)程描述符等操作。3.最后copy_process為父task_struct中設(shè)置指向子進(jìn)程進(jìn)程task_struct的指針。

轉(zhuǎn)載于:https://my.oschina.net/134596/blog/1636375

總結(jié)

以上是生活随笔為你收集整理的Linux中的进程创建函数fork的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。