Linux程序關係(轉載)
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, &, %
相關推薦
Linux程序關係(轉載)
Linux的程序相互之間有一定的關係。比如說,在Linux程序基礎中,我們看到,每個程序都有父程序,而所有的程序以init程序為根,形成一個樹狀結構。我們在這裡講解程序組和會話,以便以更加豐富的方式了管理程序。 程序組 (process group) 每個程序都會屬於一個程序組(process group)
WebSocket的原理,以及和Http的關係 (轉載)
一、WebSocket是HTML5中的協議,支援持久連線;而Http協議不支援持久連線。 首先HTMl5指的是一系列新的API,或者說新規範,新技術。WebSocket是HTML5中新協議、新API. Http協議本身只有1.0和1.1,也就是所謂的Keep-alive,把多個Http請求合併為一個。
Linux -----wget 命令(轉載)
Linux wget是一個下載檔案的工具,它用在命令列下。對於Linux使用者是必不可少的工具,尤其對於網路管理員,經常要下載一些軟體或從遠端伺服器恢復備份到本地伺服器。如果我們使用虛擬主機,處理這樣的事務我們只能先從遠端伺服器下載到我們電腦磁碟,然後再用ftp工具上傳到伺服器。這樣既浪費時間又浪費精力,那不
hibernate實體類之間的一對一關係(轉載)
one-to-one 元素 屬性: name:對映類屬性的名字 class:對映的目標類 cascade:設定操作中的級聯策略 可選值為 all所有操作情況均進行級聯、none所有操作情況均不進行級聯、save-update執行更新操作時級聯、delete執行刪除操作時
WindowsXP系統程序說明(轉載)
Smss.exe 會話管理子系統,它負責啟動使用者會話。這個程序是通過系統程序來初始化的,包括對已經正在執行的Winlogon,Win32(Csrss.exe)執行緒和設定的系統變數作出反映。在它啟動這些程序後,它等待Winlogon或者Csrss結束。如果這些過程是正常的,系統就關掉了。如果發生了什麼不可預
Linux程序相關(二)
一、模擬實現殭屍程序, 孤兒程序 1.殭屍程序:殭屍程序是一個比較特殊的狀態,當程序退出並且父程序沒有讀取到子程序退出的返回程式碼時就會產生殭屍程序,而且殭屍程序會以終止狀態保持在程序表中,並且會一直等待父程序讀取退出戶狀態程式碼,那麼當子程序退出,父程序
Linux程序分析(二) 父子程序與程序組
ps命令一般用來顯示終端資訊和程序資訊,執行命令ps -eo pid,comm,cmd可以輸出所有程序的資訊,e代表所有程序,後面三個引數是需要輸出的資訊。 第一列PID是一個整數,每一個程序都有一個唯一的PID來代表自己的身份,程序也可以根據PID來識別其他
Linux程序通訊(三)IPC訊號
若通過kill命令把其中一個程序殺死,且該程序還沒有執行V操作釋放資源。若使用SEM_UNDO標誌,則作業系統將自動釋放該程序持有的訊號量,從而使得另外一個程序可以繼續工作。若沒有這個標誌,另外程序將P操作永遠阻塞。
linux程序排程(2)
1.程序的排程 作為多程序的系統,Linux系統必須擔負起排程程序的責任,不斷地切換程序,以使CPU得到最大化的利用,提高系統的效率。 1.1 Linux程序排程的策略 程序排程的策略主要考慮以下幾個原則: (1) 高效 — 使處理器
Linux程序分析(三) fork迴圈建立Linux子程序
fork fork的意思是複製程序,就是把當前的程式再載入一次,載入後,所有的狀態和當前程序是一樣的(包括變數)。fork不象執行緒需提供一個函式做為入口, fork後,新程序的入口就在 fork的下一條語句。 返回值為pid_t,實際是unsigned i
Linux程序通訊(二)IPC訊息佇列
訊息佇列提供了一種從一個程序向另一個程序傳送一個數據塊的方法。每個資料塊都被認為含有一個型別,接收程序可以獨立地接收含有不同型別的資料結構。我們可以通過傳送訊息來避免命名管道的同步和阻塞問題。但是訊息佇列與命名管道一樣,每個資料塊都有一個最大長度的限制。
Linux程序和執行緒關係淺析 (轉載)
程序概念 程序是表示資源分配的基本單位,又是排程執行的基本單位。例如,使用者執行自己的程式,系統就建立一個程序,併為它分配資源,包括各種表格、記憶體空間、磁碟空間、I/O裝置等。然後,把該程序放人程序的就緒佇列。程序排程程式選中它,為它分配CPU以及其它有關資源,該程序才真正執行。所以,
將 Win32 C/C++ 應用程式遷移到 POWER 上的 Linux,第 1 部分: 程序、執行緒和共享記憶體服務 (轉載)
特別是程序、執行緒和共享記憶體服務)到 POWER 上 Linux 的對映。本文可以幫助您確定哪種對映服務最適合您的需要。作者向您詳細介紹了他在移植 Win32 C/C++ 應用程式時遇到的 API 對映。概述有很多方式可以將 Win32 C/C++ 應用程式移植和遷移到 p
linux最大文件句柄數量總結(轉載)
指定 which 非root cti 文件打開 可能 查看 mit value 最近部署上線的一個引擎,啟動之後內存、日誌顯示一切正常,但是外部無法進行引擎訪問。幾經周折,在同事的協助下,找出了問題:root用戶的open files為1024,引擎啟動時,1024個文
LINUX設備驅動程序筆記(三)字符設備驅動程序
準備 p s con 文件系統 write post container form nod <一>.主設備號和次設備號 對字符設備的訪問時通過文件系統內的設備名稱進行的。那些設備名稱簡單稱之為文件系統樹的節點,它們通常位於/dev文
Linux下安裝Python3的django並配置mysql作為django默認數據庫(轉載)
make lba del log pri ica www src rim 我的操作系統為centos6.5 1 首先選擇django要使用什麽數據庫。django1.10默認數據庫為sqlite3,本人想使用mysql數據庫,但為了測試方便順便要安裝一下sqlite開發
《javascript高級程序設計》筆記五(轉載)
ava self. turn 遍歷數組 slice 需要 tostring 替換 後進先出 第五章 引用類型 在上一章中,作者就在說變量的值的時候,提到過引用類型這個概念。JavaScript中存在基本類型和引用類型,其中引用類型很重要,這裏有許多我們需要註意的東西。從目
Linux程序設計(搭建開發環境--curses)
包名 monit con 發現 dsm pop 依賴關系 當前 term 看官們。咱們今天要說的內容。是前面內容的一點小補充,詳細的內容是:安裝curses開發包。以搭建 開發環境。閑話休說,言歸正轉。 我們在前面說過搭建開發環境的內容,主要說了
當一個程序員寫不出代碼了,該怎麽辦?(轉載)
保持 解決 為我 水平 身體 min height 開源 軟件工程 翻譯作者:碼農網-小峰 轉載地址:http://www.codeceo.com/article/what-to-do-programming-sucks.html 原文標題:What Do You Do W
(轉載)Java程序員應當知道的10個面向對象設計原則
程序 rep 開放 不同 單一職責原則 世界 企業項目 們的 ive 面向對象設計原則是OOPS編程的核心, 但我見過的大多數Java程序員熱心於像Singleton (單例) 、 Decorator(裝飾器)、Observer(觀察者) 等設計模式,而沒有把足夠多的註意力