Linux程序間關係

2021-08-19 22:46:30 字數 2660 閱讀 1780

程序組

每乙個程序除了自己的程序id,還有自己的程序組id。程序組由乙個或多個程序組成。通常它們與作業相關聯,可以接受同一終端的各種訊號。在程序組中程序id與程序組id相同的為程序組長

組長程序可以建立乙個程序組,建立該組中的程序,然後終止。只要在某個程序組中乙個程序存在,則該程序組就存在,這與其組長程序是否終止無關。

例如:

程序組長pid為2824 殺掉 程序組長程序組還在。

『&』: 表示將程序組放在後台執行

ps選項

-a不僅列出當前使用者的程序,還列出所有其它的使用者的程序

-j列出與作業控制相關的資訊

-x不僅列出於有控制終端的程序,也列出所有無控制終端的程序 作業

shell分前後臺控制的不是程序而是作業(job)或程序組(process group),乙個前台作業可以由多個程序組組成,乙個後台作業同樣可以由多個程序組組成。

shell可以執行乙個作業和任意多後台作業。

作業與程序組的區別:

如果作業的某乙個程序建立了子程序,子程序不屬於作業,子程序屬於程序組。

一旦作業執行結束,shell就把自己提到前台(子程序還在,可是子程序不屬於作業),如果原來前台程序還存在(如果這個子程序還沒終止),它自動變為後台程序組。

例如:

#include  

shell前台執行乙個作業,作業中的程序建立了子程序,而子程序不屬於作業,當作業完成(父程序退出),shell提到前台,子程序還在打訊息,並不影響shell的執行(正常使用ls命令, 使用

kill -9殺掉子程序恢復正常)。

會話會話(session)是乙個或多個程序組的集合。乙個會話可以有乙個控制終端。這通常是登陸到其上的終端裝置(在終端登陸情況下)或偽終端裝置(在網路登陸情況下)。

建立與控制終端連線的會話首程序被稱為控制程序。乙個會話中的幾個程序組可被分為乙個前台程序組以及乙個或多個後台程序組。所以乙個會話中,應該包括控制程序(會話首程序),乙個前台程序組和任意後台程序組,新開啟乙個終端:

其中sid就是會話id。sid:2494 三個程序屬於同乙個程序組,程序組屬於會話;

tty是會話相關聯的終端。

檢視ppid:2521

看到是bash,也是我們的會話首程序。

每開乙個終端,就開啟了一次會話。

作業控制

乙個前台作業可以由多個程序組成,乙個後台作業也可以由多個程序組成,shell可以同時執行乙個前台作業和任意多個後台作業,這稱為作業控制(job control)。

jobs :檢視作業

fa 1(編號) : 將作業放在前台

ctrl c :殺掉整個作業

bg 2 : 將程序放在後台(需要先ctrl z先將作業暫停)。

作業控制有關訊號

將cat放到後台執行,由於cat需要讀標準輸入(也就是終端輸入),而後台程序是不能讀終端輸入的,因此核心發sigttin訊號給程序,該訊號的預設處理動作是使程序停止。

cat提到前台後,列印出同樣的一行,然後繼續掛起等待輸入。

如果輸入ctrl-z則向所有前台程序發sigtstp訊號,該訊號的預設動作是使程序停止,cat繼續以後台作業的形式存在。

bg命令可以讓某個停止的作業在後台繼續執行,也需要給該作業的程序組的每個程序發sigcont訊號。cat程序繼續執行,又要讀終端輸入,然而它在後台不能讀終端輸入,所以又收到sigttin訊號而停止。

用kill命令給乙個停止的程序發sigterm(15)訊號,這個訊號並不會立刻處理,而要等程序準備繼續執行之前處理,預設動作是終止程序。但如果給乙個停止的程序發sigkill訊號就不同了(會終止程序)。

Linux 程序間關係 守護程序

ps axj head n 1乙個或多個程序的集合 只要在某個程序組中 個程序存在,則該程序組就存在,這與其組 程序是否終 關。個前台作業可以由多個程序組成 乙個後台也可以由多個程序組成 作業與程序組的區別 a.out sid 會話 session 是 個或多個程序組的集合。建 與控制終端連線的會話...

linux程序間的關係

1.每個程序組有1個或多個程序組成,可能有乙個程序組長,也可能沒有 2.每個會話有1個或多個程序組組成,可能有乙個領頭程序,也可能沒有 好,貼上測試 1 include stdio.h 2 include unistd.h 3 include stdlib.h 4 include sys param...

Linux 程序間關係和守護程序

程序組是乙個或多個程序的集合。通常與乙個作業相關聯,可以接收來自同一終端的各種訊號。我們知道,每個程序都有乙個程序id存放在task struct中,程序組也有程序組id,是唯一的。乙個執行緒組擁有主線程,主線程id就是執行緒組id,類似地,程序組也有乙個組長程序,組長程序的id就是程序組id。組長...