僵尸进程和守护进程
僵死進(jìn)程:父進(jìn)程未結(jié)束,子進(jìn)程已結(jié)束,并且父進(jìn)程已經(jīng)獲取子進(jìn)程的退出狀態(tài)。這種進(jìn)程,進(jìn)程主體空間已經(jīng)釋放,只有PCB還未釋放。
處理方法:
(1)父進(jìn)程調(diào)用wait函數(shù)或者waitpid函數(shù)獲取子進(jìn)程的退出狀態(tài),這種方法可能導(dǎo)致父進(jìn)程在wait或waitpid調(diào)用出阻塞運(yùn)行,直到子進(jìn)程退出。
(2)父進(jìn)程調(diào)用signal,來(lái)忽略signal信號(hào),這樣子進(jìn)程結(jié)束后會(huì)由內(nèi)核釋放資源。
(3)對(duì)子進(jìn)程的退出捕獲她們的退出信號(hào)signal,父進(jìn)程退出信號(hào)時(shí),在信號(hào)處理函數(shù)中調(diào)用wait或waitpid操作來(lái)釋放他們的資源。
孤兒進(jìn)程:父進(jìn)程已結(jié)束,子進(jìn)程還未結(jié)束。孤兒進(jìn)程會(huì)被系統(tǒng)守護(hù)進(jìn)程init收養(yǎng),并為他們完成工作狀態(tài)收集工作。
守護(hù)進(jìn)程:通常獨(dú)立于控制終端并且周期性的執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。在操作系統(tǒng)中在系統(tǒng)的引導(dǎo)的時(shí)候會(huì)開(kāi)啟很多服務(wù)。
守護(hù)進(jìn)程的編程規(guī)則:
(1)先f(wàn)ork(),退出父進(jìn)程?? ??? ???
//?把進(jìn)程變成一個(gè)普通的進(jìn)程
(2)通過(guò)setsid()創(chuàng)建新會(huì)話?? ??? ?
//不退出父進(jìn)程,新會(huì)話創(chuàng)建不了
(3)//再fork(),退出父進(jìn)程?? ?
//?該進(jìn)程已經(jīng)成為一個(gè)新的會(huì)話的組長(zhǎng),但是它可以重新申請(qǐng)打開(kāi)一個(gè)終端,可以通過(guò)fork()一個(gè)子進(jìn)程,該子進(jìn)程不是會(huì)話的首進(jìn)程,該進(jìn)程將不能重新打開(kāi)控制終端。退出父進(jìn)程。
(4)修改工作目錄 chdir("/")?? ??? ?
//放在一個(gè)不可卸載的目錄下
(5)清除掩碼 umask()?? ???
//?由于使用fork()函數(shù)創(chuàng)建的子進(jìn)程繼承了父進(jìn)程的文件權(quán)限掩碼,這就給子進(jìn)程使用文件帶來(lái)了很多麻煩。因此把文件權(quán)限設(shè)置0,可以大大增強(qiáng)該守護(hù)進(jìn)程的靈活性。
(6)關(guān)閉所有文件描述符 close()?? ?
//長(zhǎng)時(shí)間的在后臺(tái)運(yùn)行,把不需要的描述符關(guān)閉
?
?
?
總結(jié)
- 上一篇: 挂机宝和网站服务器,挂机宝SSD硬盘vs
- 下一篇: dtft变换的性质_[2018年最新整理