2进程之间的关系:进程组,会话,守护进程
1進程組
一個或多個進程的集合,進程組ID是一個正整數。用來獲得當前進程組ID的函數。
pid_t getpgid(pid_t pid)
pid_t getpgrp(void)
獲得父子進程進程組
運行結果:
組長進程標識:其進程組ID=其進程ID
組長進程可以創建一個進程組,創建該進程組中的進程,然后終止,只要進程組中有一個進程存在,進程組就存在,與組長進程是否終止無關。
進程組生存期:進程組創建到最后一個進程離開(終止或轉移到另一個進程組)
一個進程可以為自己或子進程設置進程組ID
int setpgid(pid_tpid, pid_t pgid);
???????如改變子進程為新的組,應在fork后,exec前使用
非root進程只能改變自己創建的子進程,或有權限操作的進程
????setpgid()加入一個現有的進程組或創建一個新進程組,如改變父子進程為新的組
運行結果:
2會話
pid_t setsid(void);
A:調用進程不能是進程組組長,該進程變成新會話首進程(sessionheader)
B:該進程成為一個新進程組的組長進程。
C:需有root權限(ubuntu不需要)
D:新會話丟棄原有的控制終端,該會話沒有控制終端
E:該調用進程是組長進程,則出錯返回
F:建立新會話時,先調用fork,父進程終止,子進程調用。
?
pid_t getsid(pid_t pid);
?
pid為0表示察看當前進程sessionID
ps ajx命令查看系統中的進程。參數a表示不僅列當前用戶的進程,也列出所有其他用
戶的進程,參數x表示不僅列有控制終端的進程,也列出所有無控制終端的進程,參數j表示列出與作業控制相關的信息。
組長進程不能成為新會話首進程,新會話首進程必定會成為組長進程。
運行:
另開一個終端。最開始輸入ps ajx,運行結果如下:
稍等片刻后再次輸入ps ajx,運行結果如下:
休眠20秒后此進程自動消失。
3守護進程
A概念
Daemon(精靈)進程,是Linux中的后臺服務進程,生存期較長的進程,通常獨立于控制終端并且周期性地執行某種任務或等待處理某些發生的事件。
B模型
守護進程編程步驟
B1創建子進程,父進程退出
??????所有工作在子進程中進行
??形式上脫離了控制終端
B2在子進程中創建新會話
??setsid()函數
使子進程完全獨立出來,脫離控制
B3改變當前目錄為根目錄
??chdir()函數
防止占用可卸載的文件系統
也可以換成其它路徑
B4重設文件權限掩碼
??umask()函數
防止繼承的文件創建屏蔽字拒絕某些權限
增加守護進程靈活性
???B5關閉文件描述符
??????繼承的打開文件不會用到,浪費系統資源,無法卸載
???B6開始執行守護進程核心工作
???B7守護進程退出處理
案例說明:
運行這個程序,它變成一個守護進程,不再和當前終端關聯。用ps命令看不到,必須運行帶x參數的ps命令才能看到。另外還可以看到,用戶關閉終端窗口或注銷也不會影響守護進程的運行。
總結
以上是生活随笔為你收集整理的2进程之间的关系:进程组,会话,守护进程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.进程间的关系:终端,网络设备
- 下一篇: PCB task_struct 数