在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

fork()函數詳解

嵌入式加油站 ? 來源:嵌入式加油站 ? 2023-08-15 09:41 ? 次閱讀

1.fork()簡介

函數原型:

pid_t fork(void);//pid_t為int類型,進行了重載

pid_t getpid();// 獲取當前進程的 pid 值。

pid_t getppid(); //獲取當前進程的父進程 pid 值。

用于創建一個進程,所創建的進程復制父進程的代碼段/數據段/BSS段/堆/棧等所有用戶空間信息;在內核中操作系統重新為其申請了一個PCB,并使用父進程的PCB進行初始化;

bdc367f2-3aa9-11ee-9e74-dac502259ad0.png

如圖所示 :我們將A 進程, 也就是調用 fork 的進程稱之為父進程, 而新的進程(B 進程)稱之為子進程。

關于fork 可以命令,查看詳細說明及用法:

man 3 fork

NAME

fork, wait, waitpid - basic process management

SYNOPSIS
@load "fork"

pid = fork()

ret = waitpid(pid)

ret = wait();

DESCRIPTION
The fork extension adds three functions, as follows.

fork() Thisfunctioncreatesa new process. The return value is the zero in the child and the process-id number of the child in the parent, or -1 upon error. In the latter case, ERRNO indicates
the problem.In the child, PROCINFO["pid"] and PROCINFO["ppid"] are updated to reflect the correct values.

waitpid()
This function takes a numeric argument, which is the process-id to wait for. The return value is that of the waitpid(2) system call.

wait() This function waits for the first child to die.The return value is that of the wait(2) system call.

BUGS
There is no corresponding exec() function.

The interfaces could be enhanced to provide more facilities, including pulling out the various bits of the return status.

EXAMPLE
@load "fork"
...
if ((pid = fork()) == 0)
print "hello from the child"
else
print "hello from the parent"

SEE ALSO
GAWK: Effective AWK Programming, filefuncs(3am), fnmatch(3am), inplace(3am), ordchr(3am), readdir(3am), readfile(3am), revoutput(3am), rwarray(3am), time(3am).

fork(2), wait(2), waitpid(2).

AUTHOR
Arnold Robbins,arnold@skeeve.com.

COPYING PERMISSIONS
Copyright 2012, 2013, Free Software Foundation, Inc.

Permission is granted to make and distribute verbatim copies of this manual page provided the copyright notice and this permission notice are preserved on all copies.


2.fork()特性

fork調用的一個奇妙之處就是它僅僅被調用一次,卻能夠返回兩次,它可能有三種不同的返回值:

在父進程中,fork返回新創建子進程的進程ID;

在子進程中,fork返回0;

如果出現錯誤,fork返回一個負值;

因此我們可以通過fork返回的值來判斷當前進程是子進程還是父進程。(注:fork 調用生成的新進程與其父進程誰先執行不一定,哪個進程先執行要看系統的進程調度策略)

舉個例子來解釋fpid的值為什么在父子進程中不同:“相當于鏈表,進程形成了鏈表,父進程的fpid(p 意味point)指向子進程的進程id, 因為子進程沒有子進程,所以其fpid為0.

3, fork()例程

看到這里大家對fork()有個大致了解了,讓我們來看個例題:

#include

#include

#include

int main(int argc, const char *argv[])

{

int num = 10;

pid_t pid = fork();

if(pid==0)

{

while (1)

{

num = 100;

printf("The father pid=%d The child pid=%d num=%d ", getppid(),getpid(), num);

sleep(3);

}

}

else

{

while (1)

{

printf("The father pid=%d num=%d ", getpid(), num);

sleep(5);

}

}

return 0;

}

保存為fork_test.c

gcc-o fork_test.a fork_test.c


運行:

./fork_test.a
The father pid=15131 num=10
The father pid=15131 The child pid=15132 num=100
The father pid=15131 The child pid=15132 num=100
The father pid=15131 num=10
The father pid=15131 The child pid=15132 num=100
The father pid=15131 The child pid=15132 num=100
The father pid=15131 num=10
The father pid=15131 The child pid=15132 num=100

可以看到產生兩個pid(進程)





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • pcb
    pcb
    +關注

    關注

    4326

    文章

    23161

    瀏覽量

    399976
  • Linux系統
    +關注

    關注

    4

    文章

    596

    瀏覽量

    27510
  • PID控制
    +關注

    關注

    10

    文章

    460

    瀏覽量

    40281
  • Linux驅動
    +關注

    關注

    0

    文章

    43

    瀏覽量

    10015
  • Fork
    +關注

    關注

    0

    文章

    14

    瀏覽量

    3334

原文標題:【Linux應用開發】fork()函數詳解

文章出處:【微信號:嵌入式加油站,微信公眾號:嵌入式加油站】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux下多進程編程之fork()函數語法

    fork()函數語法 表1列出了fork()函數的語法要點。表1 fork()函數語法要點所需頭
    發表于 08-19 09:28

    Linux進程之fork()函數詳解及經典筆試題

    也是所有進程的發起者和控制者。內核啟動之后,便開始調用init進程來進行系統各項配置,該進程對于Linux系統正常工作是十分重要的。一個進程(父進程)可以通過調用fork()函數創建一個新的進程,這個
    發表于 11-13 15:31

    Linux中fork()函數詳解

    一個進程,包括代碼、數據和分配給進程的資源。fork()函數通過系統調用創建一個與原來進程幾乎完全相同的進程,也就是兩個進程可以做完全相同的事,但如果初始參數或者傳入的變量不同,兩個進程也可以做不同
    發表于 11-12 13:37

    linux內核do_fork函數創建新進程

    前面已經談了內核加載與系統引導過程,下面我們來看看內核的 do_fork() 函數是如何創建一個新的進程的。
    發表于 08-06 08:40

    Fork/Join的框架機制詳解

      一、Fork/Join框架  Java提供Fork/Join框架用于并行執行任務,核心的思想就是將一個大任務切分成多個小任務,然后匯總每個小任務的執行結果得到這個大任務的最終結果。  這種機制
    發表于 01-05 17:51

    最常見的fork用法是什么

    接口語法用來創造一個子進程在子進程中,成功的fork調用會返回 0。在父進程中fork返回子進程的 pid。如果出現錯誤,fork返回一個負值成功調用fork會創建一個新的進程,它幾乎
    發表于 12-15 07:38

    PICC庫函數詳解

    PICC庫函數詳解
    發表于 04-18 20:13 ?132次下載

    Android開發手冊—API函數詳解

    Android開發手冊—API函數詳解
    發表于 10-17 09:01 ?13次下載
    Android開發手冊—API<b class='flag-5'>函數</b><b class='flag-5'>詳解</b>

    基于Android開發手冊—API函數詳解

    基于Android開發手冊—API函數詳解
    發表于 10-24 09:06 ?18次下載
    基于Android開發手冊—API<b class='flag-5'>函數</b><b class='flag-5'>詳解</b>

    linux中fork()函數詳解

    一個進程調用fork()函數后,系統先給新的進程分配資源,例如存儲數據和代碼的空間。然后把原來的進程的所有值都復制到新的新進程中,只有少數值與原來的進程的值不同。相當于克隆了一個自己。
    發表于 04-28 17:34 ?1731次閱讀

    Linux中fork()函數詳解

    一個進程,包括代碼、數據和分配給進程的資源。fork()函數通過系統調用創建一個與原來進程幾乎完全相同的進程,也就是兩個進程可以做完全相同的事,但如果初始參數或者傳入的變量不同,兩個進程也可以做不同的事。
    發表于 05-08 14:08 ?1609次閱讀

    fork函數的作用_fork函數創建進程

     在Linux中fork函數是非常重要的函數,它的作用是從已經存在的進程中創建一個子進程,而原進程稱為父進程。
    發表于 12-01 13:41 ?7967次閱讀
    <b class='flag-5'>fork</b><b class='flag-5'>函數</b>的作用_<b class='flag-5'>fork</b><b class='flag-5'>函數</b>創建進程

    Linux內核GPIO操作函數詳解分析

    本文檔的主要內容詳細介紹的是Linux內核GPIO操作函數詳解分析免費下載。
    發表于 01-22 16:58 ?28次下載

    Linux中可怕的fork炸彈介紹

    Linux中的Fork炸彈(Fork Bomb)是一種拒絕服務攻擊的形式,它利用了操作系統中的“fork()”系統調用。
    的頭像 發表于 05-22 10:46 ?3112次閱讀
    Linux中可怕的<b class='flag-5'>fork</b>炸彈介紹

    STM32庫函數SystemInit()詳解

    STM32庫函數SystemInit()詳解
    的頭像 發表于 09-18 15:45 ?4259次閱讀
    STM32庫<b class='flag-5'>函數</b>SystemInit()<b class='flag-5'>詳解</b>
    主站蜘蛛池模板: 酒色成人网 | 久久刺激 | 日韩a无吗一区二区三区 | 免费看片你懂的 | 奇米影视四色7777久久精品 | 日本亚洲高清乱码中文在线观看 | 夜夜爽影院 | 国产色秀视频在线观看 | 片黄免费| 亚洲精品成人a在线观看 | 成年黄网站免费大全毛片 | 色综合一区 | 一级片在线免费 | 中文天堂在线视频 | 色婷婷免费视频 | 性欧美黑人巨大videos | 午夜精品视频在线看 | 精品国产自在现线看久久 | 欧美屁屁影院 | 美女扒开尿口让男人桶 | 免费观看在线视频 | 欧美大香a蕉免费 | 天天综合色天天综合网 | 三级网站视频 | 日韩欧美一卡二区 | 国产精品久久久久久吹潮 | 手机看片福利日韩 | 亚洲国产高清精品线久久 | 激情五月宗合网 | 天天干夜夜噜 | 人人澡人人人人夜夜爽 | 国产精品三级国语在线看 | 午夜撸 | 特黄特色大片免费播放路01 | 天天槽任我槽免费 | 久久久久国产一级毛片高清板 | 久久精品香蕉视频 | 一级特黄性生活大片免费观看 | 亚洲大黑香蕉在线观看75 | 免费免费啪视频视频观看 | 91色多多|