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

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

生活随笔

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

linux

Linux :进程

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

1、進(jìn)程的相關(guān)概念?

?

?ps -aux看到的太多了? 我們想查的精確一點(diǎn)

?ps -aux|grep init(所有帶init的)

?top: 別人看cpu的占用率 用 top

?

可以看到我們的這個(gè)進(jìn)程的pid 以及cpu的占用率

?

?

?

?

2、創(chuàng)建進(jìn)程函數(shù)fork 的使用

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 他的返回值是pid_t?

?

? ? ? ? ? ? ? ? 同一個(gè)程序每一次的pid都是不一樣的?

接著我們只是加一個(gè)fork

? ? ? ? ? ? ? ? ? ? ??發(fā)現(xiàn)出來(lái)了兩個(gè)結(jié)果,猜測(cè):fork 以后創(chuàng)建了新進(jìn)程

為了證明猜測(cè),如下操作

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?得出來(lái)的結(jié)果如下

? ? ? ? ?

? ? ? ? ?再猜測(cè):fork()以后父子進(jìn)程都會(huì)運(yùn)行的,只是pid 不同

因?yàn)樾逻M(jìn)程的id 號(hào)肯定和原來(lái)的id號(hào)不一樣

結(jié)果

都一樣的

?

?結(jié)果

pid跟原來(lái)相等的話是父進(jìn)程? 不相等的話是子進(jìn)程

?

這步 確定fork ()以后還有父進(jìn)程在走

?

?

?這步看看fork()大于0 是不是父進(jìn)程

?

fork()返回值大于0 進(jìn)入了父進(jìn)程。并且大于0的數(shù)剛好等于子進(jìn)程的id 號(hào)

?

?(以前的Linux是拷貝全部的 ,現(xiàn)在linux是寫時(shí)拷貝? ?,不改動(dòng)的地方直接共享)

3、fork的總結(jié)

?

這是第一個(gè)應(yīng)用場(chǎng)景

不滿足條件不創(chuàng)建任何進(jìn)程

?

想看看里面創(chuàng)建的具體的ip地址,改動(dòng)如下

?

ps -aux能看到現(xiàn)在幾個(gè)進(jìn)程再運(yùn)行

4、vfork

?先來(lái)fork的

?父子進(jìn)程都會(huì)執(zhí)行,誰(shuí)先執(zhí)行取決于進(jìn)程的調(diào)度

那么vfork 呢?

?

?一直是子進(jìn)程在運(yùn)行

稍微改動(dòng)一下

讓子進(jìn)程運(yùn)行三遍就讓父進(jìn)程運(yùn)行?

? ? ? ? ? ? ? ? ? ? ? ? 然后我們可以打印一下變量

?

?子進(jìn)程退出的時(shí)候要用好的方式退出,否則變量會(huì)被破壞掉

5、進(jìn)程退出

?

?

?推薦用exit ,exit 是對(duì)_exit 和_Exit 的分裝。

exit 會(huì)把進(jìn)程運(yùn)行的變量(緩沖區(qū)的變量)進(jìn)行處理再退出。其他兩個(gè)是直接退出

?

?

?這兩個(gè)_exit 和_Exit運(yùn)行完結(jié)果都是對(duì)的?

?但是break? 可不是對(duì)的哦,破壞了變量的值

6、父進(jìn)程等待子進(jìn)程退出

?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 代碼不用改 ,直接copy 看一眼

S+表示正在運(yùn)行的狀態(tài)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Z+就是僵尸進(jìn)程

那我們把vfork 換成fork呢

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?運(yùn)行結(jié)果如下

????????????????????????????????????????

?還是有僵尸進(jìn)程,這是因?yàn)槲覀儧]對(duì)子進(jìn)程的退出狀態(tài)收集,所以他們會(huì)變成僵尸進(jìn)程

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?這是需要用到的函數(shù)(? 一般用前兩個(gè))

(里面的ppt 改成wait 使調(diào)用者阻塞)?

?

?

?

?

因?yàn)閟tatus 參數(shù)是空的話,不關(guān)心退出狀態(tài) 。我們先來(lái)個(gè)空的試試,先用wait函數(shù)的。

?

3538沒掉了,就不會(huì)變成僵尸進(jìn)程,因?yàn)橹拔覀儧]對(duì)子進(jìn)程的退出狀態(tài)收集,所以他們會(huì)變成僵尸進(jìn)程,所以調(diào)用wait 防止子進(jìn)程變成僵尸進(jìn)程

那么退出的status 的值是多少呢?我們要用到那個(gè)非空

非空: 子進(jìn)程退出狀態(tài)放在它所指向的地址中

不僅要等待子進(jìn)程退出,還要檢查她的退出狀態(tài)。

假設(shè)退出的狀態(tài)默認(rèn)為10?

? ? ?wait 記得取地址

假設(shè)子進(jìn)程退出的時(shí)候,讓他的退出碼為3

?

?status 的值有點(diǎn)怪怪的,跟我們要的3 對(duì)不上

我們?cè)趺礃硬拍馨?真正的檢測(cè)出來(lái)?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 因?yàn)槲覀兊淖舆M(jìn)程現(xiàn)在是正常退出? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ?需要用到這個(gè)宏解析他

?

改動(dòng)一下

?

?這時(shí)候真正的結(jié)果子進(jìn)程退出的狀態(tài)碼是3

(里面的ppt 改成wait 使調(diào)用者阻塞)?

options這個(gè)選項(xiàng)讓等待子進(jìn)程退yong出的時(shí)候 ,父進(jìn)程不堵塞

?

?用的最多的是第二個(gè)? 不堵塞

?

第一個(gè)參數(shù)Pid一般也有四個(gè)取值?,一般用的最多的是第二個(gè)

?

?

?

父子進(jìn)程一起走

?雖然父進(jìn)程有調(diào)用子進(jìn)程的waitpid,但是父進(jìn)程馬上就打印了 父進(jìn)程不等待子進(jìn)程退出

?

孤兒進(jìn)程的代碼如下:

???????

?

補(bǔ)充:

?

?

?

?

?

總結(jié)

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

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