在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中尋找也...