程式程式設計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
相關文章
- unix環境高階程式設計(中)-程式篇程式設計
- 【讀書筆記】JavaScript高階程式設計(第3版)(第5-7章)筆記JavaScript程式設計
- python高階程式設計讀書筆記(一)Python程式設計筆記
- C#高階程式設計 讀書筆記C#程式設計筆記
- unix環境高階程式設計(上)-檔案篇程式設計
- unix環境高階程式設計(下)-高階IO和程式間通訊篇程式設計
- 《UNIX環境高階程式設計》(APUE) 筆記第十一章 - 執行緒程式設計筆記執行緒
- Java高階程式設計筆記 • 【第4章 網路程式設計】Java程式設計筆記
- UNIX環境高階程式設計習題——第二章程式設計
- 《JavaScript 高階程式設計》精讀筆記JavaScript程式設計筆記
- 推薦一本技術類書籍:Unix環境高階程式設計程式設計
- Unix環境高階程式設計——開源的標準化努力程式設計
- Unix環境高階程式設計——第一章-UNIX基礎知識程式設計
- JavaScript高階程式設計筆記JavaScript程式設計筆記
- Unix高階程式設計學習筆記--系統呼叫簡介程式設計筆記
- node.js高階程式設計閱讀筆記Node.js程式設計筆記
- JavaScript 高階程式設計 第三章 讀書筆記(1)JavaScript程式設計筆記
- Python網路程式設計之一:網路程式設計(《Python基礎教程-第3版》讀書筆記)Python程式設計筆記
- 《Go 語言程式設計》讀書筆記(十一)底層程式設計Go程式設計筆記
- 《JavaScript 高階程式設計》 讀書筆記--從原型鏈複習繼承JavaScript程式設計筆記原型繼承
- Javascript高階程式設計 學習筆記JavaScript程式設計筆記
- 《JavaScript高階程式設計》筆記:DOM(十)JavaScript程式設計筆記
- JavaScript DOM 程式設計藝術(第2版) 讀書筆記JavaScript程式設計筆記
- 反應式程式設計讀書筆記程式設計筆記
- 《Java程式設計思想》讀書筆記一Java程式設計筆記
- CSAPP 併發程式設計讀書筆記APP程式設計筆記
- 讀書筆記-Java程式設計思想-03筆記Java程式設計
- 《JavaScript程式設計精解》--讀書筆記JavaScript程式設計筆記
- 重讀《JavaScript高階程式設計》JavaScript程式設計
- JS高階程式設計第3章--精簡版JS程式設計
- 《程式設計師修煉之道》讀書筆記程式設計師筆記
- 《程式設計師自我修養》讀書筆記程式設計師筆記
- 《C專家程式設計》讀書筆記(1-3章)程式設計筆記
- 《UNIX網路程式設計》筆記 - select和poll程式設計筆記
- 《Go 語言程式設計》讀書筆記(十)反射Go程式設計筆記反射
- 《Go 語言程式設計》 讀書筆記 (八) 包Go程式設計筆記
- 《Go 語言程式設計》讀書筆記(四)介面Go程式設計筆記
- 《Go 語言程式設計》讀書筆記 (三) 方法Go程式設計筆記
- C語言程式設計讀書筆記:結構C語言程式設計筆記