【Linux】程序組、作業、會話以及終端的理解
一、程序組
(1)概念
我們知道每一個程序除了自己的程序 ID外,還擁有一個程序組ID。
多個程序組成的集合叫做程序組。他們彼此之間不是孤立的,存在父子、兄弟等關係,每個程序都有父程序(除了0號程序),而所有的程序的父程序都是以init程序為根,形成一個樹狀結構。
如果我們需要傳送一個任務到10個程序,讓這10個程序去執行,但是如果我們因為某種原因需要終止這項程序,則需要一個一的把這些任務刪除,並且還需要按照原來程序間的關係來刪除。現在有了程序組,我們如果需要執行任務,則可以將這個任務傳送到這個程序組,讓這個程序組內所有程序執行,嗯u過想要取消這個任務,則可以通過程序組來取消,並且保證是按照程序間的關係來進行執行的。
(2)程序組的生命週期
程序組的生命週期從建立開始到其中最後一個程序離開為止的時間區稱為程序組的生命期。
(3)程序組ID
程序組ID類似與程序ID–它是一個正整數,可以存放在pid_t資料型別中。我們可以通過getpgrp函式返回呼叫程序的程序組ID。程序組ID指的是組長程序的ID,所有程序的PGID都是該組的組長,該組是或否存在,只要組中至少還有一個程序存在,則該組存在,並且剩餘的程序於它是否是組長程序是沒有關係的。
二、作業
(1)概念
shell分前後臺來控制的不是程序而是作業,或者程序組,一個前臺作業可以由多個程序組成,一個後臺作業也可以由多個程序組成。
作業是一個多個程序組成的集合,作業更多的偏向於多個程序完成的任務。
(2)作業控制:
shell可以執行一個前臺程序和多個後臺程序。
我們可以使用組合鍵ctrl+z放入後臺暫停執行。
fg把暫停或者後臺執行的作業放入前臺執行。
bg命令把之前暫停的作業放入後臺繼續執行。
bg和fg命令如果不帶引數,則預設操作最近的一個作業,也可以新增上引數,例如%2,標識第二個作業。
前臺和後臺程序的區分是:
在前臺執行的一項作業。也是使用者使用的又控制終端的程序。
後臺作業就是獨立於控制終端的程序。
(3)作業與程序組的區別
如果我們在作業中的某個程序又建立了一個子程序,則子程序不屬於作業。但是程序組中子程序建立一個程序,則這個程序屬於這個程序組。
一旦作業執行結束,Sell會把自己提到前臺,如果原來的前臺程序還在,並且這個程序還沒有終止,則他會自動變為後臺程序。
三、會話
會話是一個或者多個程序組的集合,一旦當我們登陸一次作業系統,就形成了一次會話,一個會話可能包含多個程序組,但是隻能有一個前臺程序組。一個會話可以有一個控制終端。這通常是登陸到其上的終端裝置(在終端登陸情況下)或偽終端裝置(在網路登陸情況下)。建立與控制終端連線的會話首程序被稱為控制程序。一個會話中的幾個程序組可被分為一個前臺程序組以及一個或多個後臺程序組。所以一個會話中,應該包括控制程序(會話首程序),一個前臺程序組和任意後臺程序組。
$ proc1 | proc2 &
$ proc3 | proc4 | proc5
我們可以看到proc1和proc2是在後臺執行的,proc3和proc4以及proc5是在前臺執行的,前面兩個同屬於一個後臺程序組,後面三個同屬於一個前臺程序組,shell本身又屬於一個單獨的程序組,這些程序組的控制終端相同,它們屬於一個會話。如果此時當我們在控制終端輸入一些特殊的控制鍵,核心將會發送相應的訊號給前臺程序組中的所有程序。
四、終端
會話的領頭程序開啟一個終端之後, 該終端就成為該會話的控制終端 (SVR4/Linux)
與控制終端建立連線的會話領頭程序稱為控制程序 (session leader)
一個會話只能有一個控制終端
產生在控制終端上的輸入和訊號將傳送給會話的前臺程序組中的所有程序
終端上的連線斷開時 (比如網路斷開或 Modem 斷開), 掛起訊號將傳送到控制程序(session leader)
程序屬於一個程序組,程序組屬於一個會話,會話可能有也可能沒有控制終端。一般而言,當用戶在某個終端上登入時,一個新的會話就開始了。程序組由組中的領頭程序標識,領頭程序的程序識別符號就是程序組的組識別符號。類似地,每個會話也對應有一個領頭程序。
同一會話中的程序通過該會話的領頭程序和一個終端相連,該終端作為這個會話的控制終端。一個會話只能有一個控制終端,而一個控制終端只能控制一個會話。使用者通過控制終端,可以向該控制終端所控制的會話中的程序傳送鍵盤訊號。
同一會話中只能有一個前臺程序組,屬於前臺程序組的程序可從控制終端獲得輸入,而其他程序均是後臺程序,可能分屬於不同的後臺程序組。
當我們開啟多個終端視窗時,實際上就建立了多個終端會話。每個會話都會有自己的前臺工作和後臺工作
通過線路規程來獲取使用者的輸入,它是對使用者輸入的一個過濾器,如果是正常字元,則不做任何處理,如果是組合鍵,則他會將該組合件變成相應的訊號
下圖表明瞭會話和程序組以及終端的概念
相關推薦
【Linux】程序組、作業、回話、守護程序的基本概念!!
程序組 每一個程序在建立的時候就有自己的程序ID,同時也有自己的ID(PGID)。一個程序組,可以含有一個或者多個程序,程序組也有自己的ID,通常是程序組裡面第一個程序的ID。 程序組的特點: 每一個程序組有一個組長程序,程序組長的ID等於程序組ID 程
【Linux】程序組、作業、會話以及終端的理解
一、程序組 (1)概念 我們知道每一個程序除了自己的程序 ID外,還擁有一個程序組ID。 多個程序組成的集合叫做程序組。他們彼此之間不是孤立的,存在父子、兄弟等關係,每個程序都有父程序(除了0號程序),而所有的程序的父程序都是以init程序為根,形成一
【Linux】程序間通訊之訊息佇列、訊號量和共享儲存
訊息佇列、訊號量和共享儲存是IPC(程序間通訊)的三種形式,它們功能不同,但有相似之處,下面先介紹它們的相似點,然後再逐一說明。 1、相似點 每個核心中的IPC結構(訊息佇列、訊號量和共享儲存)都用一個非負整數的識別符號加以引用,與檔案描述符不同,當一個
【linux】程序建立、等待、終止
建立程序—fork函式 函式原型:pid_t fork(void); 返回值:子程序返回0;父程序返回子程序pid,失敗返回-1(失敗的原因:1記憶體不夠;2系統程序數量太多); 注意:fork
【wtfPython】一組有趣的、微妙的、複雜的Python程式碼片段
原作者:董偉明 (Dongweiming) 原文連結:推薦wtfPython: 一組有趣的、微妙的、複雜的Python程式碼片段 本文有細微改動 wtfPython 1 就是「What the f**k Python?」的意思,這個專案列舉了一些程式碼片段,可能結果和你想到的是
【Linux】常用命令之ln、chmod、scp
目錄 一、ln 建立軟/硬連結 二、chmod 修改檔案或目錄的許可權 三、scp 不同linux系統之間複製檔案和目錄 一、ln 建立軟/硬連結 它的功能是為某一個檔案在另外一個位置建立一個同步的連結。 當我們需要在不同的目錄,用到相同的檔案時,我們不
【Linux】 網路服務的啟動、關閉和重啟
根據主機系統的不同,具體的使用命令存在不同 1. CentOS / RHEL / Red Hat / Fedora # service network stop # service netwo
【Linux】檔案內容檢視——cat、more、less、head...
正向檢視——cat root@linux ~]# cat [-AEnTv] 檔案路徑 引數: -A :相當於 -vET 的整合引數,可列出一些特殊字元~ -E :將結尾的斷行字元 $ 顯示出來; -n :打印出行號; -T :將
【Linux】數組與關聯數組
variable spa 語法 col div 報錯 ria declare right 數組 數組的定義: variable=(arg1 arg2 arg3 …) 中間用空格分開,數組的下標從0開始 1.獲取下標為n的元素 variable[n] 不存在數組溢出的情況,如
【Linux】程序狀態。重點殭屍程序,孤兒程序
我們都知道程序可以認為是一個執行的程式,那麼為了弄明白正在執行的程序是什麼意思,我們需要先了解程序的狀態。。。下面的狀態在kernel原始碼中定義: 1.程序狀態 R執行狀態:並不意味著程序一定在執行中,它表明程序要麼在執行中要麼在執行佇列裡。
【Linux】程序基礎
程式:為了完成特定任務的一系列指令的有序集合. 程序:程式的一次動態執行過程 也稱為task 任務 通俗地講,就是一個正在執行中的程式。 1、每個程序都有自己的執行狀態; 2、每個程序都有自己的虛擬地址空間; 3、程序是作業系統分配資源的基本單
【Linux】程序等待與程序替換
程序的銷燬 1.釋放資源 2.記賬資訊 3.將程序狀態設定成殭屍狀態 4.轉儲存排程 程序終止的方法 正常退出 1.exit (C庫函式) exit函式要先執行一些清除操作,然後才將控制權交給核心
【Linux】程序間通訊
1.程序間通訊的目的 資料傳輸,一個程序需要將它的資料傳送給另一個程序 資源共享:多個程序之間共享同樣的資源 通知事件:一個程序需要向另一個或一組程序傳送資訊,通知發生了某種事件(如程序終止時要通知父程序) 程序控制:有些程序希望完全控制另一個程序的執行(如
【Linux】程序
程序排程演算法 FCFS 先來先服務(first-come first-served, FCFS)的排程演算法,是按照程序到達的先後次序進行排程,或者說它是優先考慮在就緒佇列中等待時間最長的程序,而不管該程序所需執行的時間長短 SPF 短程序優先(short p
【Linux】程序管理
一、基本介紹 1) 在LINUX中,每個執行的程式(程式碼)都稱為一個程序。每一個程序都分配一 個ID號。 2) 每一個程序,都會對應一個父程序,而這個父程序可以複製多個子程序。例如www伺服器。 3) 每個程序都可能以兩種方式存在的,前臺與後臺。所謂前臺程序就是使用者目前的螢幕上可以進
【Linux】程序間關係與守護程序
程序間關係 程序組/作業/會話 程序組 程序組是一個或多個程序的集合,通常它們與一組作業相關聯,可以接受來自同一終端的各種訊號。 每個程序除了有一個程序ID之外,還屬於一個程序組。 每個程序組都有唯一的程序組ID(整數,也可以存放在pid_t型別
【Linux】程序間通訊-訊號量詳解及程式設計例項
前面一篇文章執行緒同步之訊號量同步 講的是執行緒之間的訊號量,這篇講的更加具有通用性,能夠實現程序之間的同步。 訊號量概述 訊號量定義: 它是一個特殊變數,只允許對它進行等待和傳送訊號這兩種操作。 P(訊號量變數sv):等待。如果sv大於0,減小sv。如果sv為0,掛起這
【Linux】程序間通訊(IPC)之訊號量詳解與測試用例
學習環境centos6.5 Linux核心2.6 程序間通訊概述 1. 程序通訊機制 一般情況下,系統中執行著大量的程序,而每個程序之間並不是相互獨立的,有些程序之間經常需要互相傳遞訊息。但是每個程序在系統中都有自己的地址空間,作業系統通過頁表
【Linux】程序間通訊-命名管道FIFO
命名管道概述 如果我們要在不相關的程序間交換資料,那麼使用FIFO檔案將會十分方便。 FIFO檔案通常也稱為命名管道(named pipe)。命名管道是一種特殊型別的檔案,它在檔案系統中以檔名的形式存在。 建立命名管道 建立命名管道一般有兩種方式: 命令列方式 一個比較舊
【Linux】程序間通訊(IPC)之訊息佇列詳解及測試用例
學習環境 Centos6.5 Linux 核心 2.6 什麼是訊息佇列? 訊息佇列是SystemV版本中三種程序通訊機制之一,另外兩種是訊號量和共享儲存段。訊息佇列提供了程序間傳送資料塊的方法,而且每個資料塊都有一個型別標識。訊息佇列是基於訊息的,而管