程序組 (process group)
每個程序都會屬於乙個程序組(process group),每個程序組中可以包含多個程序。程序組會有乙個程序組領導程序 (process group leader),領導程序的pid (pid見linux程序基礎)成為程序組的id (process group 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的許多地方應用。
下面分享一些關於linux相關學習資料,可以加裙領資料:1126743406
linux網路高併發技術之epoll
linux多執行緒程式設計"陷阱"
linux下程序執行緒間通訊原理解析
Linux程序關係
linux的程序相互之間有一定的關係。比如說,在linux程序基礎中,我們看到,每個程序都有父程序,而所有的程序以init程序為根,形成乙個樹狀結構。我們在這裡講解程序組和會話,以便以更加豐富的方式了管理程序。每個程序都會屬於乙個程序組 process group 每個程序組中可以包含多個程序。程序...
Linux程序關係
linux的程序相互之間有一定的關係。比如說,在linux程序基礎中,我們看到,每個程序都有父程序,而所有的程序以init程序為根,形成乙個樹狀結構。我們在這裡講解程序組和會話,以便以更加豐富的方式了管理程序。每個程序都會屬於乙個程序組 process group 每個程序組中可以包含多個程序。程序...
Linux程序關係
linux的程序相互之間有一定的關係。比如說,在linux程序基礎中,我們看到,每個程序都有父程序,而所有的程序以init程序為根,形成乙個樹狀結構。我們在這裡講解程序組和會話,以便以更加豐富的方式了管理程序。每個程序都會屬於乙個程序組 process group 每個程序組中可以包含多個程序。程序...