linux操作系统之进程组及会话
(1)進(jìn)程組(作業(yè)):代表一個或多個進(jìn)程的集合。
? ? ? ? ? 1)父進(jìn)程創(chuàng)建子進(jìn)程時,默認(rèn)子進(jìn)程與父進(jìn)程屬于同一進(jìn)程組,進(jìn)程組id==第一個進(jìn)程id(組長id,父進(jìn)程id)。
? ? ? ? ? 2)使用kill -SIGKILL -進(jìn)程組id(負(fù)數(shù))? 將整個進(jìn)程組殺死。
? ? ? ? ? 3)只有進(jìn)程組中還有進(jìn)程存在,進(jìn)程組就一直存在,與組長進(jìn)程是否終止無關(guān)。
? ? ? ? ? 4)進(jìn)程組生存周期為進(jìn)程組中最后一個進(jìn)程存活時間。
? ? ? ? ? 5)一個進(jìn)程可以為自己或子進(jìn)程設(shè)置進(jìn)程組id(setpgid)
(2)進(jìn)程組操作函數(shù)
? ? ? ? ?1)獲取當(dāng)前進(jìn)程的進(jìn)程組id:getpgrp
? ? ? ? ? ? ? ? ? ? ?pid_t? getpgrp(void);? ? ? ? ? ?//返回調(diào)用者的進(jìn)程組ID
? ? ? ? ?2)獲取指定進(jìn)程的進(jìn)程組id:getpgid
? ? ? ? ? ? ? ? ? ? pid_t? getpgid(pid_t pid);? ?//成功返回0,失敗返回-1
? ? ? ? ? ? ? ? ? ? ? ? ?pid=0時,該函數(shù)效果和getpgrp作用相同
? ? ? ? 3)改變進(jìn)程組默認(rèn)所屬進(jìn)程組:setpgid(通常用來加入一個現(xiàn)有的進(jìn)程組或創(chuàng)建一個新進(jìn)程組)
? ? ? ? ? ? ? ? ? ?int? setpgid(pid_t pid ,pid_t pgid);? 成功:0 失敗:-1
? ? ? ? ? ? ? ? ? ? ? 功能:將pid加入到pgid中
? ? ? ? ? ? ? 注意事項:1>如果想要把子進(jìn)程設(shè)置為新的組,應(yīng)把setpgid放在fork函數(shù)之后,exec函數(shù)(執(zhí)行完后不返回了)之前。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2>改變進(jìn)程組只有在符合自己權(quán)限的情況下才能改變。
(3)會話:一個或多個進(jìn)程組的集合
? ? ? ? ? 1)創(chuàng)建會話
? ? ? ? ? ? ? ? ? 1>創(chuàng)建會話的進(jìn)程不能使進(jìn)程組的組長,如果是組長進(jìn)程,則會出錯
? ? ? ? ? ? ? ? ? 2>創(chuàng)建會話的進(jìn)程會成為新進(jìn)程組的組長進(jìn)程
? ? ? ? ? ? ? ? ? 3>一般linux需要root權(quán)限(ubuntu不需要)
? ? ? ? ? ? ? ? ? 4>新會話會舍棄原有的控制終端,該會話沒有控制終端
? ? ? ? ? ? ? ? ? 5>建立新會話的順序,先調(diào)用fork,父進(jìn)程終止,子進(jìn)程調(diào)用setsid函數(shù)創(chuàng)建會話,稱為進(jìn)程組組長和會話的會長。
? ? ? ? ? 2)會話操作函數(shù)
? ? ? ? ? ? ? ? 1>獲取進(jìn)程組所屬會話id:getsid
? ? ? ? ? ? ? ? ? ? ? pid_t getsid(pid_t pid)? 成功:返回調(diào)用進(jìn)程的會話id? 失敗:-1
? ? ? ? ? ? ? ? ? ? ? ? ? ?pid=0? ? 查看當(dāng)前進(jìn)程的會話id
? ? ? ? ? ? ? ? ? ?ps ajx? ?參數(shù)j代表與控制作業(yè)相關(guān)的信息,參數(shù)a代表所有用戶的進(jìn)程,參數(shù)x代表所有控制終端和無控制終端的進(jìn)程。
? ? ? ? ? ? ? ?2>創(chuàng)建一個新會話,并將自己的id設(shè)置為進(jìn)程組id和新會話id:setsid
? ? ? ? ? ? ? ? ? ? pid_t setsid(void)??成功:返回調(diào)用進(jìn)程的會話id? 失敗:-1
? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ??3)會話的作用:創(chuàng)建守護(hù)(daemon精靈)進(jìn)程
? ? ? ? ? ? ? ?1>守護(hù)進(jìn)程的定義:linux后臺服務(wù)進(jìn)程,通常獨立與控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事情,一般采用以d結(jié)尾的名字。
? ? ? ? ? ? ? ?2>守護(hù)進(jìn)程的特點:沒有控制終端,不能直接和用戶交互,不受用戶登錄、注銷的影響,一直運行著。
? ? ? ? ? ? ? ?3>創(chuàng)建守護(hù)進(jìn)程的流程:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1》創(chuàng)建子進(jìn)程,父進(jìn)程退出,所有工作都在子進(jìn)程中進(jìn)行形式上體力子控制終端。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2》在子進(jìn)程中創(chuàng)建新會話(setsid函數(shù)),使子進(jìn)程完全獨立出來,脫離控制。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3》改變當(dāng)前目錄為根目錄(chdir函數(shù)),防止占用可卸載的文件系統(tǒng)(如掛載在/mnt下的U盤中的程序,就屬于可卸載)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?4》重設(shè)文件權(quán)限掩碼(umask函數(shù)),防止繼承的文件創(chuàng)建某些屏蔽字拒絕某些權(quán)限,增加守護(hù)進(jìn)程的靈活性。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5》關(guān)閉文件描述符,繼續(xù)的打開文件(0/1/2)不會用到,浪費系統(tǒng)資源,無法卸載,可以重定向到/dev/null文件下。?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?6》開始執(zhí)行守護(hù)進(jìn)程核心工作,守護(hù)進(jìn)程退出處理程序模型。
? ? ? ? ? 4>創(chuàng)建守護(hù)進(jìn)程例子
? ? ? ? ? ? ? ? ? ??
總結(jié)
以上是生活随笔為你收集整理的linux操作系统之进程组及会话的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux操作系统之终端
- 下一篇: 镜花水月第一季剧情介绍