linux程序系列 5 程序鏈與程序扇

2021-07-24 19:53:29 字數 2265 閱讀 1697

在linux程式設計中我們或許需要建立多個程序才可以完成任務需求,那麼我們怎麼建立多個程序呢?下面我們介紹一下程序鏈與程序扇的概念

所謂程序鏈就是父程序建立乙個子程序,建立的子程序再次建立出屬於自己的子程序,這樣依次往下迴圈,如下圖所示。

所謂的程序扇就是乙個父程序建立出多個子程序,如下圖所示。

下面是程序鏈與程序扇的示例**:

程序鏈 /*

* process_link.c

**  created on: 2016-11-22

*      author: river

*/#include

#include

#include

int main(int argc, char **argv)

else

int i = 1;

pid_t pid;

for(; i < counter; i++)

else if(pid > 0)

}printf("pid: %d, ppid: %d\n", getpid(), getppid());

while(1)

exit(0);

}因為我們需要建立鏈式的程序結構,需要有這樣的要求父程序建立了乙個子程序後退出迴圈,防止再次建立子程序,子程序建立了乙個程序後再退出。因此我們在for迴圈中需要判斷父程序,如果是父程序則退出迴圈,保正父程序只會建立乙個子程序。

我們在程式執行時輸入引數4,該程式就會建立4個程序,程式執行結果如下:

pid: 5189, ppid: 5083

pid: 5190, ppid: 5189

pid: 5191, ppid: 5190

pid: 5192, ppid: 5191

上面的輸出結果中5183是我們執行的程式的pid,5083是我們啟動這個程式所使用的bash,其它三個程序是建立的程序鏈中的子程序。

我們通過pstree命令可以看到如下程序樹:

├─gnome-terminal─┬─bash─┬─a.out───a.out───a.out───a.out

可以看到bash後面跟著4個鏈式的啟動的程序。或者我們可以通過ps -ef | grep a.out 檢視到後台執行的程序,如下所示:

river@wind:~/workspace/linux_programming/process_create$ ps -ef | grep a.out

river     5189  5083  0 22:01 pts/3    00:00:00 ./a.out 4

river     5190  5189  0 22:01 pts/3    00:00:00 ./a.out 4

river     5191  5190  0 22:01 pts/3    00:00:00 ./a.out 4

river     5192  5191  0 22:01 pts/3    00:00:00 ./a.out 4

river     5224  5083  0 22:09 pts/3    00:00:00 grep --color=auto a.out

上面的程序鏈**的關鍵是判斷出是父程序則退出建立子程序的迴圈,子程序繼續建立接下來的程序。而對於程序扇則是這樣的,判斷出子程序則退出建立子程序的迴圈,把建立程序的機會只留給父程序。**如下: /*

* process_swing.c

**  created on: 2016-11-22

*      author: river

*/#include

#include

#include

int main(int argc, char **argv)

else

int i = 1;

pid_t pid;

for(; i < counter; i++)

else if(pid == 0)

}printf("pid: %d, ppid: %d\n", getpid(), getppid());

while(1)

exit(0);

}引數輸入4,程式執行結果:

pid: 5308, ppid: 5083

pid: 5309, ppid: 5308

pid: 5310, ppid: 5308

pid: 5311, ppid: 5308

5083是啟動的bash,父程序是5308,三個子程序是5309,5310,5311。

linux程序系列 6 守護程序與孤兒程序

守護程序是生存期長的一種程序,它們常常在系統引導裝入時啟動,系統關閉時終止。守護程序有如下幾個特點 1.所有的守護程序都是以超級使用者 使用者id為0的root使用者 的優先權執行 2.守護程序沒有控制終端,一直在後台執行 3.守護程序的父程序都是init程序 1號程序 什麼是孤兒程序呢?父程序結束...

linux環境程式設計 孤兒程序,殭屍程序,守護程序

前面的 程序控制我們已經陸續的介紹啦,今天介紹一下孤兒程序,殭屍程序,還有守護程序 一.孤兒程序 父程序 先於 子程序結束,那子程序就成為了孤兒程序,父程序的資源被 init程序 沒有結束的子程序就被init程序領養,init程序可以被看程是孤兒院的院長。二.殭屍程序 父程序 還在執行 子程序已經結...

linux核心 5 核心程序排程與程序切換

一 程序排程 程序被建立到了鍊錶中,如何再進行進一步的呼叫和排程?程序排程 void schedule void 程序排程函式 switch to next 程序切換函式 一 void schedule void 程序排程函式 1 看一下 呼叫了schedule函式,在system call中尋找也...