程序組
程序組是指乙個或多個程序的集合。通常與乙個作業相關聯,可以接收來自同一終端的訊號。每個程序組有乙個唯一的程序組id,它類似於程序id,是乙個正整數(其實就是組長程序的程序id)。可以通過函式獲得
#include
pid_t getpgrp(void);
程序組都有乙個組長,組長程序的標識是其程序組id等於程序id。
組長可以建立乙個組長程序組,建立該程序組的程序,然後終止。程序存在於組長存在沒必要關係,只要程序組有乙個程序存在,則程序組就存在。程序組生命週期為組長建立到最後乙個程序離開為止。程序組中最後乙個程序可以終止,或者轉移到另乙個程序組中。
可以通過下面函式加入乙個程序組或建立乙個程序組:
#include
int setpgid(pid_t pid, pit_t pgid);
乙個程序只能為它自己或自己的子程序設定程序組id,在它的子程序呼叫了exec函式後,它就不能再改變該子程序的程序組id了。
在大多數作業控制的shell中,在fork之後呼叫setpgid函式,使父程序設定其子程序的程序組id,並且使子程序設定其自己的程序組id。如果不這樣做,那麼fork之後,由於父、子程序執行先後次序的不確定,會造成在一段時間內(父、子程序只執行了其中乙個)子程序組員身份的不確定(取決於哪個程序先執行),這就產生了競爭條件。
會話(session)
會話是乙個或多個程序組的集合。shell的管道線將幾個程序編成一組。
proc1 | proc2 &
proc3 | proc4 | proc5
編成的會話如下圖:
程序呼叫setsid函式建立乙個新會話
#include
pid_t setsid(void);
如果呼叫此函式的程序不是乙個程序組的組長,則此函式會建立乙個新會話,結果將發生下面3件事:
1、該程序變成新會話首程序。此時,該程序是新會話的唯一的程序。
2、該程序成為乙個新進場組的組長程序。新程序組的id是該呼叫程序的程序id。
3、該程序沒有控制終端。如果有,在呼叫後,這種聯絡也會被中斷。
如果該程序是乙個程序組的組長程序,則此函式返回出錯。為了保證不會發生這種情況,通常先呼叫fork,然後使其父程序終止,而子程序則繼續。
原文:
Linux程序組和會話
linux的程序相互之間有一定的關係。比如說,在linux程序基礎中,我們看到,每個程序都有父程序,而所有的程序以init程序為根,形成乙個樹狀結構。我們在這裡講解程序組和會話,以便以更加豐富的方式了管理程序。每個程序都會屬於乙個程序組 process group 每個程序組中可以包含多個程序。程序...
關於程序和會話
oracle例項有兩種型別 單程序例項和多程序例項。單程序oracle 又稱單使用者oracle 是一種資料庫系統,乙個程序執行全部oracle 由於oracle部分和客戶應用程式不能分別以程序執行,所以oracle的 和使用者的資料庫應用是單個程序執行。在單程序環境下的oracle 例項,僅允許乙...
作用 和會話期 程序組 第五十四期 程序的結束
在之間的章節我們了解了程序的建立和執行,在程序執行完畢或者發生一些意料之外的事之後難免會被結束,因此linux提供了exit 的系統呼叫來完成程序結束以及釋放占用資源的功能。其中有兩種系統呼叫能用來完成結束程序或者執行緒的功能。sys exit 可以用來結束單個程序或執行緒,sys exit gro...