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

歡迎訪問 生活随笔!

生活随笔

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

linux

linux进程管理fork,Linux -- 进程管理之 fork() 函数

發(fā)布時間:2023/12/19 linux 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux进程管理fork,Linux -- 进程管理之 fork() 函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一個進程調(diào)用fork()函數(shù)后,系統(tǒng)先給新的進程分配資源,例如存儲數(shù)據(jù)和代碼的空間。然后把原來的進程的所有值都復(fù)制到新的新進程中,只有少數(shù)值與原來的進程的值不同。相當(dāng)于克隆了一個自己。

Test1

for(int i = 0; i<2; i++)

{

if(fork() == 0)

printf("A\n");

else

printf("B\n");

}

上述代碼中,fork() 執(zhí)行后會出現(xiàn)兩個進程,子進程中的 fork() 返回值為 0,父進程中 fork() 返回值則是子進程的 pid

執(zhí)行結(jié)果如下圖

Test2

將上述代碼稍微修改一下

for(int i = 0; i<2; i++)

{

if(fork() == 0)

printf("A");

else

printf("B");

}

該循環(huán)中打印沒有字符 "\n",無法刷新緩沖區(qū)

每一次 fork() 會復(fù)制之前進程中緩沖區(qū)的字符

最后執(zhí)行結(jié)果為

BBBAABAA

(取決于兩個進程執(zhí)行的順序)

Test3

if(fork() && fork())

printf("A\n");

else

printf("B\n");

該 if 塊中第一個 fork() 生成一個子進程,返回 0,所以第二個 fork() 不會執(zhí)行

父進程返回 pid,執(zhí)行第二個 fork(),再次產(chǎn)生一個子進程

所以最終 printf 調(diào)用了三次,最后執(zhí)行結(jié)果為

A

B

B

Test4

#include

#include

// 測試棧空間的變量

void f0()

{

int tmp = 0;

int pid = fork();

if(pid == 0)

{

tmp++;

printf("son\n");

}

else if(pid > 0)

{

printf("parents\n");

}

else

{

return;

}

printf("%d\n",tmp);

}

int tmp1 = 5;

// 測試全局變量

void f1()

{

int pid = fork();

if(pid == 0)

{

tmp1++;

printf("son\n");

}

else if(pid > 0)

{

printf("parents\n");

}

else

{

return;

}

printf("%d\n",tmp1);

}

// 測試堆區(qū)變量

void f2()

{

int *tmp2 = (int*)malloc(sizeof(int));

*tmp2 = 0;

int pid = fork();

if(pid == 0)

{

(*tmp2)++;

printf("son\n");

}

else if(pid > 0)

{

printf("parents\n");

}

else

{

return;

}

printf("%d\n",*tmp2);

}

通過在 main 分別執(zhí)行以上三個函數(shù),輸出中父進程與子進程打印的 tmp 值均不相同

可以發(fā)現(xiàn),fork() 后生成新的子進程與父進程是相互獨立的,擁有獨立的 VMA

進程管理之fork函數(shù)

fork函數(shù)的定義 #include #include pid_t fork(void); fork函數(shù)在父進程中返回子進程的 ...

UNIX環(huán)境編程學(xué)習(xí)筆記(19)——進程管理之fork 函數(shù)的深入學(xué)習(xí)

lienhua342014-10-07 在“進程控制三部曲”中,我們學(xué)習(xí)到了 fork 是三部曲的第一部,用于創(chuàng)建一個新進程.但是關(guān)于 fork 的更深入的一些的東西我們還沒有涉及到,例如,fork ...

【Linux編程】進程標識符與fork函數(shù)

ID為0的進程一般是調(diào)度進程.常被稱為交換進程(swapper),是內(nèi)核中的系統(tǒng)進程. ID為1的進程叫做init進程,是一個普通用戶進程,不屬于內(nèi)核,由內(nèi)核調(diào)用. 一個現(xiàn)有進程能夠調(diào)用fork函數(shù)創(chuàng) ...

Linux進程管理知識整理

Linux進程管理知識整理 1.進程有哪些狀態(tài)?什么是進程的可中斷等待狀態(tài)?進程退出后為什么要等待調(diào)度器刪除其task_struct結(jié)構(gòu)?進程的退出狀態(tài)有哪些? TASK_RUNNING(可運行狀態(tài)) ...

Linux性能及調(diào)優(yōu)指南(翻譯)之Linux進程管理

總結(jié)

以上是生活随笔為你收集整理的linux进程管理fork,Linux -- 进程管理之 fork() 函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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