程序的生命週期:
建立: 每個程序都是由其父程序建立,程序可以建立子程序,子程序又可以建立子程序的子程序
執行: 多個程序可以同時存在,程序間可以通訊
撤銷: 程序可以被撤銷,從而結束乙個程序的執行
程序的狀態:
執行狀態:程序正在占用cpu
就緒狀態:程序已具備一切條件,正在等待分配cpu的處理時間片
等待狀態:程序不能使用cpu,若等待事件發生則可將其喚醒
linux中的程序包含3個段,分別為「資料段」、「**段」和「堆疊段」。
「資料段」存放的是全域性變數、常數以及動態資料分配的資料空間;
「**段」存放的是程式**的資料。
「堆疊段」存放的是子程式的返回位址、子程式的引數以及程式的區域性變數等。
死鎖:
多個程序因競爭資源而形成一種僵局,若無外力作用,這些程序都將永遠不能再向前推進
獲取id:
#include
#include
pid_t getpid(void) 獲取本程序id。
pid_t getppid(void) 獲取父程序id
例:getpid.c (演示)
#include
#include
#include
int main(void)
程序建立:
#include
pid_t fork(void)
功能:建立子程序
fork的奇妙之處在於它被呼叫一次,卻返回兩次,它可能有三種不同的返回值:
0: 子程序
子程序id(大於0):父程序
-1: 出錯
例: #include
#include
int main()
程序建立vfork:
#include
#include
pid_t vfork(void)
功能:建立子程序
表頭檔案: #include定義函式: pid_t vfork(void); 函式說明:
vfork()會產生乙個新的子程序,其子程序會複製父程序的資料與堆疊空間,並繼承父程序的使用者**,組**,環境變數、已開啟的檔案**、工作目錄和資源限制等。
子程序不會繼承父程序的檔案鎖定和未處理的訊號。
注意,linux不保證子程序會比父程序先執行或晚執行,因此編寫程式時要留意死鎖或競爭條件的發生。
fork和vfork區別:
1. fork:子程序拷貝父程序的資料段
vfork:子程序與父程序共享資料段
2. fork:父、子程序的執行次序不確定
vfork:子程序先執行,父程序後執行
exec函式族:
exec用被執行的程式替換呼叫它的程式。
區別:fork建立乙個新的程序,產生乙個新的pid。
exec啟動乙個新程式,替換原有的程序,因此程序的pid不會改變。
#include
int execl(const char * path,const char * arg1, ...)
引數:path:被執行程式名(含完整路徑)。
arg1 – argn: 被執行程式所需的命令列引數,含程式名。以空指標(null)結束。
#include
int execv (const char * path, char * const argv[ ])
引數:path:被執行程式名(含完整路徑)。
argv: 被執行程式所需的命令列引數陣列。
pid_t wait (int * status)
功能:阻塞該程序,直到其某個子程序退出。
#include
#include
pid_t waitpid (pid_t pid, int * status, int options)
功能:會暫時停止目前程序的執行,直到有訊號來到或子程序結束 例:
#include
#include
#include
#include
#include
#include
int main()
else if(0==pid)
else
}return 0;}
kill:
#include
#include
#include
#include
int main()
else if(0==pid)
else
return 0;
}
程序控制程式設計
q 為何需要多程序 或者多執行緒 為何需要併發?a 併發技術,就是可以在同一時間同時執行多條任務的技術,使用者進行的任務往往不止乙個,單 cpu計算機實際上只能在乙個時間片段內執行一條指令。linux 使用 程序排程 實現併發,為每個程序指派一定的執行時間,這個時間通常很短,然後依照某種規則,依次單...
程序控制程式設計
1.多程序與併發的關係 當有多個執行緒在操作時,如果系統只有乙個cpu,則它根本不可能同時真正進行乙個以上的執行緒,它只能把 cpu執行時間劃分成若干個時間段,再把時間段分配給各個執行緒執行,在乙個時間段的執行緒 執行時,其他執行緒處於掛起狀態。這種方式我們成為併發。2.kill,pkill,xki...
程序控制程式設計
一.程序的分類 互動程序,批處理程序,守護程序。二.程序的屬性 1.程序id pid 是唯一的數值,用來區分程序 2.父程序和父程序的id ppid 3.啟動程序的使用者id uid 和所歸屬的組 gid 4.程序狀態 狀態分為執行r,休眠s,殭屍z 5.程序執行的優先順序 6.程序所連線的終端名 ...