程式程式設計3 - UNIX高階環境程式設計第9章讀書筆記
9 Process Relationships
1 Process Groups
1. 每個程式屬於一個Process Group,這個process Group從同樣的Terminal獲得Signal
2. Getpgrp可以獲得process Group ID,也用pid_t結構表示:
#include <unistd.h>
pid_t getpgrp(void);
返回撥用程式所屬於的Process Group ID |
3. getpgid可以獲得某個程式的Process Group ID
#include <unistd.h>
pid_t getpgid(pid_t pid);
返回pid制定的程式所屬於的Process Group ID |
如果引數pid = 0,則返回撥用程式所屬的ProcessGroup的ID
4. 每個Group都有一個Leader,這個Leader的ProcessID = Process Group ID
5. 一個程式呼叫setpgid來參加或者建立一個process Group:
#include <unistd.h>
int setpgid(pid_t pid, pid_t pgid);
成功返回0,錯誤返回-1 |
注意如果pid=pgid,則指定程式成為Process Group Leader
如果pid=0,則指定程式為呼叫程式
2 Sessions
1. Session是一個或者多個Process Group
2. 呼叫setsid函式來建立一個新的session
#include <unistd.h>
int setsid(void);
成功返回0,錯誤返回-1 |
3. 呼叫setsid函式,如果該程式不是Process Group Leader,則函式會建立一個新的Session
a. 程式成為Session的Session Leader
b. 成為新的Process Group的Leader
c. 程式沒有Controlling Terminal
4. Single UNIX Specification沒有Session ID,不過我們可以認為一個Session的Session Leader的Process ID = Session ID
5. getsid可以獲得Session ID:
#include <unistd.h>
pid_t getsid(pid_t pid);
成功返回Session Leader的Process ID,錯誤返回-1 |
同樣的,pid = 0標明是呼叫程式
3 Controlling Terminal
Session和Process Group有下面特性:
1. Session只能有一個Controlling Terminal
2. Session Leader和Controlling Terminal建立聯絡,稱之為Controlling Process
3. Session中的Process Group可以被分為一個Foreground process group和多個Background process group
4. 按下Interrupt Key (DELETE or CTRL+C)或者Quit Key (Ctrl+/),signal會傳送給Foreground Process Group中的所有Process
5. 如果network/modem disconnect被檢測到,則Controlling Process會收到一個hang-up signal
6. 大部分時候Controlling Terminal就是我們Login時候的Terminal
4 tcgetpgrp, tcsetpgrp, tcgetsid
1. 下面這些函式可以被用來告訴Kernel那些Process Group是Foreground,那些是Background:
#include <unistd.h>
pid_t tcgetpgrp(int filedes);
成功返回Foreground Process Group的ID,錯誤返回-1
int tcsetpgrp(int filedes, pid_t pgrpid);
成功返回0,錯誤返回-1 |
2. tcgetpgrp返回filedes對應的Terminal的Foreground process group ID,而tcsetpgrp可以設定foreground process group id
3. tcgetsid函式可以獲得filedes所對應的Session ID,也就是Session Leader的Process Group ID
#include <termios.h>
pid_t tcgetsid(int filedes);
成功返回Session ID,錯誤返回-1 |
Links
程式程式設計1 – UNIX高階環境程式設計7章讀書筆記
程式程式設計2 – Unix環境高階程式設計8章讀書筆記
程式程式設計3 - UNIX高階環境程式設計第9章讀書筆記
UNIX訊號(signal)程式設計 - UNIX高階環境程式設計第10章讀書筆記
使用pthread庫進行多執行緒程式設計1 - UNIX環境高階程式設計第11章讀書筆記
使用pthread庫進行多執行緒程式設計2 - UNIX高階環境程式設計第12章讀書筆記
作者: ATField
E-Mail: atfield_zhang@hotmail.com
Blog: http://blog.csdn.net/atfield
相關文章
- 程式程式設計1 – Unix環境高階程式設計7章讀書筆記程式設計筆記
- 程式程式設計2 – Unix環境高階程式設計8章讀書筆記程式設計筆記
- UNIX訊號(signal)程式設計 - UNIX高階環境程式設計第10章讀書筆記程式設計筆記
- 使用pthread庫進行多執行緒程式設計1 - UNIX環境高階程式設計第11章讀書筆記thread執行緒程式設計筆記
- 使用pthread庫進行多執行緒程式設計2 - UNIX高階環境程式設計第12章讀書筆記thread執行緒程式設計筆記
- unix環境高階程式設計(中)-程式篇程式設計
- UNIX系統程式設計的瑞士軍刀 --《UNIX環境高階程式設計》書評程式設計
- 【讀書筆記】JavaScript高階程式設計(第3版)(第5-7章)筆記JavaScript程式設計
- C#高階程式設計 讀書筆記C#程式設計筆記
- python高階程式設計讀書筆記(一)Python程式設計筆記
- 【筆記】《JavaScript高階程式設計(第3版)》(1)筆記JavaScript程式設計
- 【筆記】《JavaScript高階程式設計(第3版)》(2)筆記JavaScript程式設計
- unix環境高階程式設計(上)-檔案篇程式設計
- unix環境高階程式設計(下)-高階IO和程式間通訊篇程式設計
- Java高階程式設計筆記 • 【第4章 網路程式設計】Java程式設計筆記
- Objective-C高階程式設計讀書筆記(二)Object程式設計筆記
- Objective-C高階程式設計讀書筆記(一)Object程式設計筆記
- 《UNIX環境高階程式設計》(APUE) 筆記第十一章 - 執行緒程式設計筆記執行緒
- UNIX環境高階程式設計——執行緒和fork程式設計執行緒
- 《JavaScript 高階程式設計》精讀筆記JavaScript程式設計筆記
- Objective-C高階程式設計讀書筆記之GCDObject程式設計筆記GC
- Objective-C高階程式設計讀書筆記之blocksObject程式設計筆記BloC
- 《JavaScript高階程式設計第3版》-學習筆記-1JavaScript程式設計筆記
- UNIX環境高階程式設計習題——第二章程式設計
- 《JavaScript高階程式設計(第3版)》讀後感JavaScript程式設計
- 推薦一本技術類書籍:Unix環境高階程式設計程式設計
- 《unix環境高階程式設計》書中原始碼編譯問題解決程式設計原始碼編譯
- JavaScript高階程式設計筆記JavaScript程式設計筆記
- Unix環境高階程式設計——開源的標準化努力程式設計
- node.js高階程式設計閱讀筆記Node.js程式設計筆記
- Unix環境高階程式設計——第一章-UNIX基礎知識程式設計
- Objective-C高階程式設計讀書筆記之記憶體管理Object程式設計筆記記憶體
- 第一篇:《UNIX 環境高階程式設計》編譯環境的搭建程式設計編譯
- JavaScript 高階程式設計 第三章 讀書筆記(1)JavaScript程式設計筆記
- 《LINUX與UNIX SHELL程式設計指南》讀書筆記(轉)Linux程式設計筆記
- 《APUE》第7章 程式環境-讀書筆記筆記
- 《UNIX環境高階程式設計》apue原始碼Ubuntu下的編譯程式設計原始碼Ubuntu編譯
- 《程式設計匠藝》讀書筆記程式設計筆記