Linux程式關係
Linux的程式相互之間有一定的關係。比如說,在
中,我們看到,每個程式都有父程式,而所有的程式以init程式為根,形成一個樹狀結構。我們在這裡講解程式組和會話,以便以更加豐富的方式了管理程式。
程式組 (process group)
每個程式都會屬於一個程式組(process group),每個程式組中可以包含多個程式。程式組會有一個程式組領導程式 (process group leader),領導程式的PID (PID見Linux程式基礎)成為程式組的ID (process group ID, PGID),以識別程式組。
$ps -o pid,pgid,ppid,comm | cat
PID PGID PPID COMMAND
17763 17763 17751 bash
18534 18534 17763 ps
18535 18534 17763 cat
PID為程式自身的ID,PGID為程式所在的程式組的ID, PPID為程式的父程式ID。從上面的結果,我們可以推測出如下關係:
圖中箭頭表示父程式透過fork和exec機制產生子程式。ps和cat都是bash的子程式。程式組的領導程式的PID成為程式組ID。領導程式可以先終結。此時程式組依然存在,並持有相同的PGID,直到程式組中最後一個程式終結。
我們將一些程式歸為程式組的一個重要原因是我們可以將訊號傳送給一個程式組。程式組中的所有程式都會收到該訊號。我們會在下一部分深入討論這一點。
會話 (session)
更進一步,在shell支援工作控制(job control)的前提下,多個程式組還可以構成一個會話 (session)。bash(Bourne-Again shell)支援工作控制,而sh(Bourne shell)並不支援。
會話是由其中的程式建立的,該程式叫做會話的領導程式(session leader)。會話領導程式的PID成為識別會話的SID(session ID)。會話中的每個程式組稱為一個工作(job)。會話可以有一個程式組成為會話的前臺工作(foreground),而其他的程式組是後臺工作(background)。每個會話可以連線一個控制終端(control terminal)。當控制終端有輸入輸出時,都傳遞給該會話的前臺程式組。由終端產生的訊號,比如CTRL+Z, CTRL+\,會傳遞到前臺程式組。
會話的意義在於將多個工作囊括在一個終端,並取其中的一個工作作為前臺,來直接接收該終端的輸入輸出以及終端訊號。 其他工作在後臺執行。
一個命令可以透過在末尾加上&方式讓它在後臺執行:
$ping localhost > log &
此時終端顯示:
[1] 10141
括號中的1表示工作號,而10141為PGID
我們透過如下方式查詢更加詳細的資訊:
$ps -o pid,pgid,ppid,sid,tty,comm
(tty表示控制終端)
訊號可以透過kill
$kill -SIGTERM -10141
或者
$kill -SIGTERM %1
的方式來傳送給工作組。上面的兩個命令,一個是傳送給PGID(透過在PGID前面加-來表示是一個PGID而不是PID),一個是傳送給工作1(%1),兩者等價。
一個工作可以透過$fg從後臺工作變為前臺工作:
$cat > log &
$fg %1
當我們執行第一個命令後,由於工作在後臺,我們無法對命令進行輸入,直到我們將工作帶入前臺,才能向cat命令輸入。在輸入完成後,按下CTRL+D來通知shell輸入結束。
程式組(工作)的概念較為簡單易懂。而會話主要是針對一個終端建立的。當我們開啟多個終端視窗時,實際上就建立了多個終端會話。每個會話都會有自己的前臺工作和後臺工作。這樣,我們就為程式增加了管理和執行的層次。在沒有圖形化介面的時代,會話允許使用者透過shell進行多層次的程式發起和管理。比如說,我可以透過shell發起多個後臺工作,而此時標準輸入輸出並不被佔據,我依然可以繼續其它的工作。如今,圖形化介面可以幫助我們解決這一需求,但工作組和會話機制依然在Linux的許多地方應用。
總結
process group, pgid
session, sid, job, forground, background
fg, kill -pid, &, %
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31543790/viewspace-2676074/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux socke server程式設計:父程式和子程式關係LinuxServer程式設計
- 物件導向程式設計程式碼詳解(依賴關係,關聯關係,組合關係)物件程式設計
- Unix、Linux、GNU 關係梳理Linux
- GNU與Linux 的關係Linux
- 程式和產品的關係
- Linux檢視相關係統資訊Linux
- Linux系統配置SSH信任關係Linux
- 程式執行緒協程關係執行緒
- 程式設計就像兩性關係程式設計
- 什麼是Linux,Linux與UNIX的關係(轉)Linux
- 關係
- Linux命令之pstree - 以樹狀圖顯示程式間的關係Linux
- 大資料與程式語言關係大資料
- 孤兒程式與終端的關係
- Linux Shell檔案之間的包含關係Linux
- 雲端計算和Linux是什麼關係?Linux
- linux新增信任關係免密碼登入Linux密碼
- Fedora Core 與 Red Hat Linux 的關係(轉)Linux
- 關聯關係與依賴關係的區別
- 【集合論】序關係 ( 哈斯圖示例 | 整除關係哈斯圖 | 包含關係哈斯圖 | 加細關係哈斯圖 )
- FAILGROUP和REDUNDANCY之間的關係關係!AI
- LINUX系統程式設計 SWAP原理以及和資料庫(MYSQL ORACLE)關係Linux程式設計資料庫MySqlOracle
- 關係模型模型
- 資料關係比較:相關性 vs 因果關係
- 雲端計算和Linux什麼關係?linux雲端計算Linux
- Java中各程式碼層級的關係Java
- 關係型資料庫,何以稱為“關係”資料庫
- 矩陣:橫向關係和縱向關係矩陣
- android版本與linux核心版本對應關係AndroidLinux
- GNU是什麼?和Linux是什麼關係?Linux
- 【集合論】二元關係 ( 二元關係記法 | A 到 B 的二元關係 | 二元關係個數 | 二元關係示例 )
- 在Linux中,Unix和Linux之間的關係是什麼?Linux
- 統計學三大相關係數之Pearson相關係數、Spearman相關係數
- 表的關聯關係
- Hibernate關聯關係
- 資料庫 - 關係代數與關係運算資料庫
- Java程式和執行緒關係及區別Java執行緒
- SQL 程式設計思想:一切皆關係SQL程式設計