麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統 > Unix > 正文

UNIX高級環境編程(12)進程關聯(Process Relationships)- 終端登錄過程 ,進程組,Session

2024-06-28 13:21:16
字體:
來源:轉載
供稿:網友
UNIX高級環境編程(12)進程關聯(PRocess Relationships)- 終端登錄過程 ,進程組,session

在前面的章節我們了解到,進程之間是有關聯的:

  • 每個進程都有一個父進程;
  • 子進程退出時,父進程可以感知并且獲取子進程的退出狀態。

本章我們將了解:

  • 進程組的更多細節;
  • sessions的內容;
  • login shell和我們從login shell啟動的進程之間的關系。

?

一 終端登錄(Terminal Logins)BSD Terminal Logins

?BSD終端的登錄程序在過去35年都沒有改變。

  1. 系統管理員(the system adminstrator)創建一個文件 /etc/ttys,每一個登錄終端都在該文件占一行,改行包含登錄終端名,其他的參數則會傳遞給getty函數。
  2. 其中一個參數是終端的傳輸波特率(baud rate)。
  3. 當系統引導完成,內核創建init進程,進程ID為1。init進程負責引導系統啟動。
  4. init進程讀取文件/etc/ttys,并為每一個登錄設備fork一個進程,然后執行exec運行getty程序。

?上面的流程如下圖所示:

NewImage

由init進程fork創建的進程的real user ID為0,effective user ID為0,并且他們都有超級用戶權限。

程序getty的職責:為終端設備調用open函數,一旦設備被打開,文件描述符0,1,2被設置給該設備。然后getty輸出一些提示符,等待我們輸入用戶名。當我們輸入用戶名后,getty的工作就完成了,然后通過調用exec函數執行登錄函數,如下。

execle(“/bin/login”, “login”, “-p”, username, (char *)0, envp);

增加了login程序后,流程如下圖所示:

NewImage

上圖中fork出來的進程都有超級用戶權限,因為他們都是從init進程fork出來,而init進程有超級用戶權限。

下面的進程的進程ID都是相同的,因為exec函數不改變進程的ID,并且他們的父進程的ID都是1。

現在登錄程序轉到login程序執行,login程序會做下面的事情:

  1. 根據我們輸入的用戶名,調用函數getpwnam獲取用戶名對應的密碼;
  2. 調用函數getpass打印提示符 PassWord: ,等待讀取我們輸入的密碼;
  3. 對我們輸入的密碼進行加密,將加密后的密碼和從系統密碼文件獲取的密碼進行對比,如果密碼不同,則login程序調用exit函數退出,并返回退出狀態1。init進程得到1的進程終止狀態,則會再次執行fork進行登錄重試。

如果我們正確登錄,則login程序會繼續做下面的事情:

  1. 當前工作目錄切換到我們的主目錄(chdir);
  2. 改變我們的終端設備的所有權為我們自己所有(chown);
  3. 改變我們的終端設備的權限,使得我們可以從該終端設備讀取和輸入;
  4. 設置我們的組ID(setgid和initgroups);
  5. 初始化我們的環境變量;
  6. 改變我們的用戶ID(setuid),激活我們的登錄shell ,如execl(“/bin/sh”, “-sh”, (char *)0);

?過程如下圖所示:

NewImage

我們的shell已經啟動后,會去讀取啟動文件(.profile或.bash_profile或.bash_login或.profile,不同的系統啟動文件的命名不同)。這些啟動文件的作用是增加系統的環境變量,設置一些全局變量,鏈接等。

?

2 網絡登錄(Network Logins)

物理登錄和網絡登錄的區別在于:登錄終端到主機的連接是否是點對點的。

網絡登錄情況下,登錄是一種可用服務,就像其他的服務,如FTP或SMTP。

網絡登錄服務特點是不知道會有多少登錄請求會來。所以內核不是在等待每一個可能的登錄,而是通過網絡接口驅動(network interface drivers)在等待一個網絡連接登錄請求。

為了統一處理物理登錄和網絡登錄,一個軟件驅動,叫做虛擬終端(pseudo terminal)被用來用將網絡登錄后的行為請求映射為真實終端的行為。

BSD Network Logins

進程inetd等待處理大部分的網絡連接。

下面我們將了解網絡登錄的過程。

  1. 系統啟動時,init進程創建一個shell執行腳本/etc/rc,其中一個后臺進程就是inetd。一旦該腳本終止,inetd進程的父進程就成為了init進程;
  2. inetd的職責是等待TCP/IP連接請求,一旦有新的連接請求到來,inetd會執行fork and exec執行相應的處理程序;
  3. telnetd程序會啟動一個TELNET服務器,等待用戶遠程登錄,用戶通過TCP協議鏈接服務器,并通過合法的用戶密碼進行登錄。

啟動telnetd程序的過程如下圖所示:

NewImage?

telnetd進程啟動后的動作為:

  1. 打開一個虛擬終端(pseudo teminal),然后調用fork創建出兩個進程;
  2. 父進程處理來自網絡的連接請求;
  3. 子進程執行exec函數調用login程序;
  4. 父進程和子進程通過虛擬終端鏈接;
  5. 如果子進程正確登錄,則后面的過程和物理登錄相同。

過程如下圖所示:

NewImage

?

?3 進程組(Process Groups)

每一個進程都屬于一個進程組。

進程組是一些進程的集合,這些進程常常關聯于同一個job,并且從同一個終端接收信號。

每一個進程組都有一個唯一的進程組ID。

函數getpgrp返回調用進程的進程組ID。

函數聲明:

?#include <unistd.h>

pid_t getpgrp(void);

? ? ? ? // Returns: process group ID of calling process

?

pid_t getpgid(pid_t pid);

? ? ? ? // Returns: process group ID if OK, -1 on error

函數調用getpgid(0); 和函數調用getpgrp(); 作用相同,都返回調用進程的進程組ID。

每個進程組都有個頭進程,該進程的進程ID和進程組ID相同。

進程組的生命周期:從一個進程創建一個組開始,只到最有一個組內進程終止或者成為另外一個組的進程為止。

一個進程可以調用函數setpgid加入到另一個進程組或者創建一個進程組。

函數聲明:

?#include <unistd.h>

int setpgid(pid_t pid, pid_t pgid);

函數設置進程ID為pid的進程的進程組ID為pgid。

如果pid和pgid相同,都為某個進程的進程ID,則進程pid成為一個進程組的頭進程。

如果pid為0,則表示待設置的進程為當前進程。

?

4 Sessions

一個session是一個或幾個進程組的集合。

例如下圖所示:

NewImage

一個進程通過調用函數setsid創建一個新的session。

函數聲明:

?#include <unistd.h>

pid_t setsid(void);

? ? ? ? // Returns: process group ID if OK, -1 on error

如果調用進程不是組頭進程,則會發生三件事:

  1. 該進程成為創建的新session的session leader;
  2. 該進程成為一個新進程組的頭進程,新進程組ID為該調用進程的進程號;
  3. 該進程不關聯終端。

函數getsid返回一個session leader進程的進程組ID。

函數聲明:

#include <unistd.h>

pid_t getsid(pid_t pid);

? ? ? ? // Returns: session leader’s process group ID if OK, -1 on error

如果pid為0,函數getsid返回調用進程所在的session leader進程的進程組號。

?

?

參考資料:

《Advanced Programming in the UNIX Envinronment 3rd》

?


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人免费一区二区三区在线观看 | 免费观看一区 | 中文字幕网在线 | 久国久产久精永久网页 | 亚洲成人中文字幕在线 | 欧美大电影免费观看 | 久久国产精品免费视频 | 亚洲小视频在线播放 | 国产福利视频在线观看 | 日韩在线播放第一页 | 国产精品18久久久久久久 | 国产精品一区在线免费观看 | 99精品视频在线 | 91精品国产免费久久 | 最新中文字幕在线视频 | 国产一级二级在线播放 | av成人免费在线观看 | 一区二区三区日韩精品 | 一区国产视频 | 99久久婷婷国产综合精品青牛牛 | 特级黄色小说 | 亚洲男人的天堂在线视频 | 特大黑人videos与另类娇小 | 国产正在播放 | 国产亚洲精彩视频 | 亚洲综合91 | 一本一本久久a久久精品综合小说 | 狠狠干天天操 | av噜噜噜噜 | 国产精品亚洲欧美一级在线 | 国产精品刺激对白麻豆99 | 在线看一级片 | 成人 日韩| 羞羞的视频免费在线观看 | 欧美高清另类自拍视频在线看 | 日韩黄色片在线观看 | 涩涩屋av| 91成人影库 | 国产99久久精品一区二区300 | 嫩草91在线| 久久久久久久久日本理论电影 |