我們寫原始碼編譯成可執行檔案,我們執行可執行檔案生成程序
程序處理我們job,跟使用者打交道的就是進城了。每個程序都有自己
的程序標識(非負整數)是唯一的,但是程序標示是可以復用的
當乙個程序結束後它的程序id就可以被別的新程序使用。當然了每
個程序也有自己的程序空間,程序空間大家都很熟悉了,程序空間
採用虛擬儲存技術,讓我們可以執行大於我們記憶體的程式。記憶體空間
主要:程序環境變數,程序棧, 匿名記憶體分配 ,堆,未初始化全域性變數
初始化全域性變數,正文(程式)。總的來說程序和程式的區別就是程序
是動態的並且包含程式的內容,程式是靜態的就是乙個檔案。
程序的建立過程就是pcb建立(分配資源)並且插入到就緒佇列的過程。
在unix中我們使用的 是 fork 函式
#include
pid_t fork(void);
返回值:子程序返回0,父程序返回子程序id;若出錯,返回-1
fork 子程序複製父程序程序空間但是共享正文部分,檔案描述符也複製
就相當於執行了 dup 函式一樣。
#include
void
exit(int status);
void _exit(int status);
#include
void _exit(int status);
其中exit函式結束之前,會呼叫fflush函式,沖洗緩衝區 _exit _exit 函式
不沖洗緩衝區直接結束程序。
main 函式中的return 相當於exit 函式,效果一樣。
#include
pid_t wait(int
*statloc);
pid_t waitpid(pid_t pid, int
*statloc, int options);
倆個函式返回值:若成功返回程序id,若出錯返回0
引數: statloc 為null 則標示不關注終止程序狀態,
整形指標 指向結束子程序的狀態位址
在乙個子程序終止前,wait使其呼叫者阻塞
#include
int pause(void);
返回值:-1,errno 設定為 eintr
只有執行了乙個訊號處理程式並從其返回時,pause才返回。在這種情況下
pause返回-1, errno 設定為eintr。
unsigned
int alarm(unsigned
int seconds);
返回值:0或以前設定的鬧鐘時間的餘留秒數
sleep(int seconds) ;這個函式大家應該都很熟悉吧,那大家有木有自己
寫過這個函式,或者知道這個函式是怎麼實現的呢,其實我們可以通過alarm
這個函式定時,然後讓程序阻塞(pause),時間到之後喚醒程序就可以達到sleep的效果
不過因為涉及到了訊號的處理需要考慮競度問題,因為alarm時間到了之後系統
會給你發出訊號,訊號處理完之後會繼續執行pause之後的。下面是乙個簡單的例子
unsigned
int sleep1(unsigned
int seconds)
程序的阻塞一般使用 pause函式,pause函式會在程序處理完乙個訊號程式並返回時
才返回,也就是喚醒程序, 所以喚醒乙個程序最簡單的辦法就是在pause之前,給程序
註冊乙個訊號,然後使用kill函式給該程序傳送乙個註冊過的訊號
#include
intkill
int signo);
raise(int signo);
返回值:若成功返回0,出錯返回-1
rasie 向自身傳送訊號 raise(signo) == kill(getpid(), signo)
pid > 0 將訊號傳送給程序id為pid的程序
pid == 0 將訊號傳送給與傳送程序同乙個程序組的所有程序(具有許可權)
pid < 0 將訊號傳送給其程序組id等於pid絕對值的程序組的所有程序(具有許可權)
pid == -1 將訊號傳送給傳送程序有許可權向他們傳送訊號的所有程序。
Unix 程序控制
一 程序 程序id為1是init程序,在自舉過程結束時由核心呼叫。程序id為2是頁精靈程序,此程序負責支援虛存系統的請頁操作。也是核心程序。二 fork 對於父程序已經終止的所有程序,它們的父程序都改變為init程序,我們稱這些程序由init程序領養。此保證了每個程序有乙個父程序。init被編寫成只...
《unix高階環境程式設計》程序控制 程序ID
在unix系統中,每個程序都有乙個非負整型表示的唯一程序id。當乙個程序終止時,程序id可以重新被其他程序使用,為了防止誤判,unix系統實現延遲重用演算法,即新建的程序id不同於最近終止程序所使用的id。程序id為0的是排程程序,也稱為交換程序,是核心的一部分,不執行磁碟上的程式,因此也稱為系統程...
《unix高階環境程式設計》程序控制 程序時間
程序時間有牆上時鐘時間 使用者cpu時間和系統cpu時間。任一程序都可以呼叫 times 函式以獲得它自己以及終止子程序的上述值。cpp view plain copy 程序時間 返回值 若成功則返回流逝的牆上時鐘時間 單位 時鐘滴答數 若出錯則返回 1 函式原型 include clock t t...