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

歡迎訪問 生活随笔!

生活随笔

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

linux

TCP/IP,Linux下多进程编程,进程复制函数fork,双返回值函数,通过父进程复制一份代码相同的子进程,父子进程执行顺序由调度算法决定,代码中获取进程执行用户的函数,数据共享状态

發(fā)布時(shí)間:2023/12/31 linux 21 豆豆

TCP/IP,Linux下多進(jìn)程編程,進(jìn)程復(fù)制函數(shù)fork,雙返回值函數(shù),通過父進(jìn)程復(fù)制一份代碼相同的子進(jìn)程,父子進(jìn)程執(zhí)行順序由調(diào)度算法決定,代碼中獲取進(jìn)程執(zhí)行用戶的函數(shù),數(shù)據(jù)共享狀態(tài)

一、Linux多進(jìn)程編程:
1、Linux多進(jìn)程編程中,一個(gè)進(jìn)程產(chǎn)生另一個(gè)進(jìn)程,需要使用fork函數(shù),fork函數(shù)可以在代碼中復(fù)制一個(gè)子進(jìn)程,
2、fork()以后的代碼被父子進(jìn)程執(zhí)行,fork()以前的代碼只被父進(jìn)程執(zhí)行,
3、使用man fork查看fork的頭文件以及聲明。

二、fork雙返回值使用方法:
1、返回值有兩個(gè),分別是子進(jìn)程的pid和0,在當(dāng)前進(jìn)程(父進(jìn)程)中會(huì)返回創(chuàng)建的子進(jìn)程的pid,在創(chuàng)建的子進(jìn)程中會(huì)返回0,將返回值與0進(jìn)行比較可以區(qū)分子進(jìn)程和父進(jìn)程,并執(zhí)行不同的操作。
2、創(chuàng)建失敗時(shí)則會(huì)返回-1
3、Linux下的所有進(jìn)程都是由父進(jìn)程bash一一fork出來的。

三、驗(yàn)證函數(shù):
1、getpid()獲取當(dāng)前進(jìn)程的pid
2、getppid()獲取當(dāng)前進(jìn)程的父進(jìn)程的pid
注意,當(dāng)子進(jìn)程獲取父進(jìn)程的pid時(shí),如果父進(jìn)程已經(jīng)運(yùn)行完畢,獲得的父進(jìn)程的pid就是1(bash進(jìn)程)或者其他值,否則就是父進(jìn)程的pid。

四、循環(huán)創(chuàng)建進(jìn)程:
1、如果在for或者while循環(huán)中fork新的進(jìn)程,創(chuàng)建出來的進(jìn)程數(shù)量將是2^n - 1,類似于兔子生孩子的情況,為了避免創(chuàng)建出一大堆進(jìn)程,每次創(chuàng)建出來的進(jìn)程都需要及時(shí)break。
2、創(chuàng)建完畢后可以通過計(jì)數(shù)器i與n比較區(qū)分父進(jìn)程和子進(jìn)程。

五、父子進(jìn)程的執(zhí)行順序:
父進(jìn)程創(chuàng)建出子進(jìn)程后,會(huì)共同搶占CPU資源,結(jié)果隨機(jī),如果想要控制兩者的運(yùn)行順序,需要使用sleep使某個(gè)進(jìn)程睡眠指定時(shí)間,或者阻塞,已達(dá)到控制運(yùn)行順序的效果,內(nèi)核使用的調(diào)度算法決定進(jìn)程的執(zhí)行先后。

六、通過代碼獲取當(dāng)前運(yùn)行時(shí)用戶:
uid_t getuid得到實(shí)際用戶id,例如sudo命令下,會(huì)得到實(shí)際的用戶uid,而不是root
uid_t geteuid得到有效id,sudo命令下,得到root的id,主要是區(qū)分su,sudo提權(quán)獲取的用戶。

七、進(jìn)程數(shù)據(jù)共享狀態(tài):
1、父子進(jìn)程擁有相同的代碼,但子進(jìn)程只會(huì)執(zhí)行fork自己往后的代碼。
2、父子相同處:
全局變量,.data,.text,堆棧,環(huán)境變量,用戶ID,進(jìn)程工作目錄,信號(hào)處理方式
3、父子不同處:
進(jìn)程ID,fork返回值,父進(jìn)程id,進(jìn)程運(yùn)行時(shí)間,鬧鐘(定時(shí)器),未決信號(hào)集。
4、父子進(jìn)程之間,讀共享,寫復(fù)制,子進(jìn)程中沒有寫操作的數(shù)據(jù),是共享的物理地址,子進(jìn)程中發(fā)生了寫操作的數(shù)據(jù),是復(fù)制了內(nèi)容的獨(dú)立物理地址。
5、父子進(jìn)程共享的數(shù)據(jù):文件描述符(打開文件的結(jié)構(gòu)體),mmap建立的映射區(qū)(用于進(jìn)程間通信)。
6、0-4G的虛擬地址中,0-3G是一樣的,3-4G的進(jìn)程有關(guān)信息是不一樣的。

總結(jié)

以上是生活随笔為你收集整理的TCP/IP,Linux下多进程编程,进程复制函数fork,双返回值函数,通过父进程复制一份代码相同的子进程,父子进程执行顺序由调度算法决定,代码中获取进程执行用户的函数,数据共享状态的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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