程序控制程式設計

2021-08-13 02:41:16 字數 2315 閱讀 2791

程序的生命週期:

建立:   每個程序都是由其父程序建立,程序可以建立子程序,子程序又可以建立子程序的子程序

執行:   多個程序可以同時存在,程序間可以通訊

撤銷:    程序可以被撤銷,從而結束乙個程序的執行

程序的狀態:

執行狀態:程序正在占用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.程序所連線的終端名 ...