創建會話
創建一個會話需要注意以下6點注意事項:
- 調用進程不能是進程組組長,該進程變成新會話首進程(session header)
- 該進程成為一個新進程組的組長進程。
- 需有root權限(ubuntu不需要)
- 新會話丟棄原有的控制終端,該會話沒有控制終端
- 該調用進程是組長進程,則出錯返回
- 建立新會話時,先調用fork, 父進程終止,子進程調用setsid
?
getsid函數
?
獲取進程所屬的會話ID
?
pid_t getsid(pid_t pid); 成功:返回調用進程的會話ID;失敗:-1,設置errno
?
pid為0表示察看當前進程session ID
?
ps ajx命令查看系統中的進程。參數a表示不僅列當前用戶的進程,也列出所有其他用戶的進程,參數x表示不僅列有控制終端的進程,也列出所有無控制終端的進程,參數j表示列出與作業控制相關的信息。
?
組長進程不能成為新會話首進程,新會話首進程必定會成為組長進程。
?
setsid函數
?
創建一個會話,并以自己的ID設置進程組ID,同時也是新會話的ID。
?
pid_t setsid(void); ?成功:返回調用進程的會話ID;失敗:-1,設置errno
?
調用了setsid函數的進程,既是新的會長,也是新的組長。
?
練習:fork一個子進程,并使其創建一個新會話。查看進程組ID、會話ID前后變化
?