linux c程式設計 程序控制 四 程序關係

2022-05-30 21:18:07 字數 1326 閱讀 4667

每乙個程序除了有乙個程序id外,還屬於乙個程序組。  程序組是乙個或多個程序的集合,通常情況下,他們是在同一作業中結合起來的,同一程序組的個程序接受來自同一終端的各種訊號。 每乙個程序組有乙個唯一的程序id。

函式getpgrp

返**用程序的程序組id。

#include

pid_t getpgrp(void);

下面的**來驗證下程序組

void pgroup_func()

else

}在子程序中建立會話

void session_func()

else

}我們可以看到在子程序沒用setsid

函式建立乙個會話之前,子程序是和父程序在同一會話裡的,當子程序用

setsid

函式建立乙個會話,會話的首程序

id就是子程序

id也就是會話id。

乙個會話可以有乙個控制終端。這通常是登陸到其上的終端裝置(

在終端登陸情況下

)或偽終端裝置

(在網路登陸情況下

)。建立與控制終端連線的會話首程序被稱為控制程序。

乙個會話中的幾個程序組可被分為乙個前台程序組以及乙個或多個後台程序組。所以乙個會話中,

應該包括控制程序

(會話首程序

),乙個前台程序組和任意後台程序組。

無論何時鍵入終端的終端鍵,都會將中斷訊號傳送到前台程序組的所有程序

還是來看之前的例子,

void session_func(){

pid_t pid;

pid_t pid1;

pid=fork();

pid1=tcgetpgrp(0);

printf("the pid1 is %d\n",pid1);

if(pid == 0){

setsid();

printf("child id is:%d, the group id is:%d,the session id is:%d\n",getpid(),getpgrp(),getsid(pid));

else{

printf("parent id is:%d,the group id is:%d,the session id is:%d\n",getpid(),getpgrp(),getsid(pid));

tcgetpgrp的原型如下,通過終端的檔案描述符fd

返回前台程序組

pid.

#include

pid_t tcgetpgrp(int fd)

通過tcgetpgrp(0)得到終端1

的pid

,可以看到和父程序的

pid是一樣的。

Linux C 程序控制

1.程式 程序 程序id pit t型別。2.get pid 取得程序idgetppid 取得父程序id。a getuid geteuid getgid getegid 取得使用者id及組id。3.fork函式建立新的程序。pid tfork void a fork函式不需要引數。b 對於父程序fo...

Linux c 程序控制

getpid獲得程序識別碼 表頭檔案 include函式原型 pid t getpid void 返回值 目前程序的程序識別碼 getppid獲得父程序的程序識別碼 表頭檔案 include函式原型 pid t getppid void 返回值 目前程序的父程序識別碼 fork建立子程序 表頭檔案 ...

linux c程式設計 程序控制 二 競爭條件

前面介紹了父子程序,如果當多個程序企圖對共享資料進行處理。而最後的結果又取決於程序執行的順序時,就認為發生了競爭關係。通過下面的例子來看下 在這裡標準輸出被設定為不帶緩衝的,於是父子程序每輸出乙個字元就要進行一次write 呼叫。這樣做的目的是盡可能多次地在兩個程序之間進行切換,以便演示競爭條件。s...