unix程序控制

2021-07-23 23:14:52 字數 2220 閱讀 5249

我們寫原始碼編譯成可執行檔案,我們執行可執行檔案生成程序
程序處理我們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...