进程的创建-fork
1.fork是linux/unix中專有的用來(lái)創(chuàng)建進(jìn)程的系統(tǒng)調(diào)用。
2.在linux/unix系統(tǒng)中,提供fork()系統(tǒng)函數(shù),非常特殊。普通的系統(tǒng)調(diào)用,調(diào)用一次就返回一次,而fork()調(diào)用一次,會(huì)返回兩次,一次是當(dāng)前進(jìn)程(父進(jìn)程),另一個(gè)是子進(jìn)程(即由當(dāng)前進(jìn)程復(fù)制的一份),然后,分別獨(dú)自運(yùn)行,互不干擾,調(diào)用的先后順序由操作系統(tǒng)的調(diào)度算法決定。
3.其中需要注意,子進(jìn)程永遠(yuǎn)返回0,而父進(jìn)程則返回子進(jìn)程的ID(>0的數(shù))。這樣做的原因是因?yàn)?#xff1a;一個(gè)父進(jìn)程可以fork出很多子進(jìn)程,父進(jìn)程需要記下每個(gè)子進(jìn)程的ID,而子進(jìn)程的父進(jìn)程是唯一的,只需要調(diào)用getppid()就可以拿到父進(jìn)程的ID。
4.fork出兩個(gè)進(jìn)程時(shí),是相互獨(dú)立運(yùn)行的,享有相同的數(shù)據(jù)資源,因而一個(gè)進(jìn)程對(duì)全局變量的更改,并不會(huì)影響到另一個(gè)進(jìn)程里全局變量的變化。
5.在一個(gè)程序里,如果有多次fork調(diào)用,則會(huì)產(chǎn)生多個(gè)進(jìn)程(一般為2^n),由此,可能會(huì)出現(xiàn)“fork炸彈”,即無(wú)限次的調(diào)用fork產(chǎn)生進(jìn)程,不斷占用內(nèi)存,最后導(dǎo)致奔潰。即
import os
while True:
? ? os.fork()
?
?
總結(jié)
以上是生活随笔為你收集整理的进程的创建-fork的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: OCP12C题库,62数据库备份与恢复(
- 下一篇: 前端学习之html——基本结构