日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

對話 UNIX,第 8 部分: UNIX 進程

在最近的街頭游樂會上 , 有一個單人樂隊讓我很是著迷 。的確 , 這讓我很開心 , 還給我留下了深刻印象 。這個單人樂隊的唯一成員利用嘴、大腿、膝蓋和腳分別控制口琴、五弦琴、鈸和腳鼓 , 生動地演奏了齊柏林飛船樂隊的《天堂的階梯》 , 他演奏的貝多芬《第五交響曲》也頗為動人 。和他相比 , 我能一邊拍腦袋一邊摸肚子就覺得很不錯了 。(或者是一邊拍肚子一邊摸腦袋 。)
對您來說 , 幸運的是 , Unix?操作系統(tǒng)更像是那個單人樂隊 , 而不是像我這個笨手笨腳的專欄作家 。UNIX 特別擅長同時處理多個任務 , 并安排它們訪問系統(tǒng)中的有限資源(內(nèi)存、設備和 CPU) 。打個比方 , UNIX 可以一邊散步 , 一邊嚼口香糖 。
這個月我們研究的內(nèi)容要比平常更深入一些 , 我們會看看 UNIX 是如何同時做這么多事的 。這次我們還會探索 shell 的內(nèi)部 , 了解工作控制命令 , 如 Ctrl C(終止)和 Ctrl Z(掛起)是怎樣實現(xiàn)的 。
一個真正的多任務系統(tǒng)
在 UNIX(以及大多數(shù)現(xiàn)代操作系統(tǒng) , 包括 Microsoft?Windows?、Mac OS X、FreeBSD 和 Linux┲?,每更w撲閎撾穸際怯梢桓黿癱硎鏡摹NIX 似乎能同時運行很多任務 , 這是因為每個進程都會輪流(從概念上來講)分到一小片 CPU 時間 。
一個進程就像一個容器 , 它與某個正在運行的應用程序、環(huán)境變量、應用程序的輸入和輸出 , 以及進程的狀態(tài)(包括其優(yōu)先級和累計資源使用情況)捆綁在一起 。圖 1 顯示了一個進程 。
圖 1. UNIX 進程的概念化模型
為了便于理解 , 您可以把一個進程想像成一個獨立的國家 , 有邊界、資源 , 還有國民生產(chǎn)總值 。
每個進程還有一個所有者 。一般來說 , 您啟動的任務(如您的 shell 和命令)的所有者就是您 。系統(tǒng)服務的所有者可能是特殊用戶或超級用戶 root 。例如 , 為了增強安全性 , Apache HTTP Server 的所有者一般是一個名為 www 的專用用戶 , 該用戶能提供 Web 服務器所需的的文件訪問權限 , 但不包含其他權限 。
進程的所有權可能會改變 , 但必須嚴格保持其獨占性 。一個進程在任何時候都只能有一個所有者 。
最后 , 每個進程都具有權限 。一般來說 , 進程的權限與其所有者的權限是相稱的 。(例如 , 如果您無法在命令行 Shell 中訪問某個特定文件 , 則您從 Shell 中啟動的程序也會繼承同樣的限制 。)這一繼承規(guī)則有一個例外情況 , 即應用程序啟用了特殊的 setuid 或 setgid 位 , 如 ls 顯示的那樣 , 在此情況下 , 某個進程可能會獲得比其所有者更高的權限 。
setuid 位可以使用 chmod u s 進行設置 。setuid 的權限如下所示:
$ ls -l /usr/bin/top
-rwsr-xr-x 1 root wheel 83088 Mar 20 2005 topsetgid 位可以使用 chmod g s 設置:
$ ls -l /usr/bin/top
-r-xr-sr-x1 root tty 19388 Mar 20 2005 /usr/bin/wall一個 setuid 進程(如啟動 top)是用擁有該文件的用戶權限運行的 。因此 , 當您運行 top 時 , 您的權限會被提升 , 與 root 的權限等同 。類似地 , 一個 setgid 進程是用與文件的組所有者相關聯(lián)的權限運行的 。
例如 , 在 Mac OS X 中 , wall 工具(“write all的縮寫 , 因其會將某個消息寫入所有物理或虛擬終端設備而得名)的 setgid 被設為tty(如上所示) 。當您登錄并分配到一個用來鍵入的終端設備(該終端成為 Shell 的標準輸入)時 , 您將被指定為該設備的所有者 , 而 tty 成為組所有者 。因為 wall 是以組 tty 的權限運行的 , 所以它可以打開和寫入所有終端 。
獲取列表
就像所有其他系統(tǒng)資源一樣 , 您的 Unix 有一個有限但十分龐大的進程池(實際上 , 系統(tǒng)中的進程幾乎用之不盡) 。每個新任務(如啟動 vi 或運行 xclock)都會立即從池中分配到一個進程 。在 UNIX 系統(tǒng)中 , 您可以使用 ps 命令 , 查看一個或多個進程 。

推薦閱讀