LINUX程序相關的幾個函式

2021-07-24 14:47:28 字數 1561 閱讀 8078

linux程序相關的幾個函式

1.pid_t fork( void) :返回值: 若成功呼叫一次則返回兩個值,子程序返回0,父程序返回子程序id;否則,出錯返回-1

2.exit(0):就是退出,傳入的引數是程式退出時的狀態碼,0表示正常退出,其他表示非正常退出,一般都用-1或者1,標準c裡有exit_success和exit_failure兩個巨集,用exit(exit_success);可讀性比較好一點。

3._exit(0):exit()函式與_exit()函式最大的區別就在於exit()函式在呼叫exit系統呼叫之前要檢查檔案的開啟情況,把檔案緩衝區中的內容寫回檔案,就是"清理i/o緩衝在乙個程序呼叫了exit之後,該程序並不會馬上完全消失,而是留下乙個稱為殭屍程序(zombie)的資料結構。殭屍程序是一種非常特殊的程序,它幾乎已經放棄了所有的記憶體空間,沒有任何可執行**,也不能被排程,僅僅在程序列表中保留乙個位置,記載該程序的退出狀態等資訊供其它程序收集,除此之外,殭屍程序不再占有任何記憶體空間。

4.pid_t wait (int * status):會暫時停止現在程序的執行,直到有訊號來到或子程序結束。假如在呼叫wait()時子程序已結束,則wait()會立即返回子程序結束狀態值。子程序的結束狀態值會由引數status 返回,而子程序的程序識別碼也會一快返回。假如不在意結束狀態值,則引數status 能夠設成null

5.waitpid:從本質上講,系統呼叫waitpid和wait的作用是完全相同的,但waitpid多出了兩個可由使用者控制的引數pid和options,從而為我們程式設計提供了另一種更靈活的方式。

引數:(status同上)     

pid:從引數的名字pid和型別pid_t中就可以看出,這裡需要的是乙個程序id。但當pid取不同的值時,在這裡有不同的意義。   

pid>0時,只等待程序id等於pid的子程序,不管其它已經有多少子程序執行結束退出了,只要指定的子程序還沒有結束,waitpid就會一直等下去。

pid=-1時,等待任何乙個子程序退出,沒有任何限制,此時waitpid和wait的作用一模一樣。   

pid=0時,等待同乙個程序組中的任何子程序,如果子程序已經加入了別的程序組,waitpid不會對它做任何理睬。

pid<-1時,等待乙個指定程序組中的任何子程序,這個程序組的id等於pid的絕對值。   

options: options提供了一些額外的選項來控制waitpid,目前在linux中只支援wnohang和wuntraced兩個選項,這是兩個常數,可以用"|"運算子把它們連線起來使用

比如:ret=waitpid(-1,null,wnohang | wuntraced);   

如果我們不想使用它們,也可以把options設為0,如:   

ret=waitpid(-1,null,0);     

wnohang:若指定的子程序還沒有結束,waitpid會立即返回0

wuntraced:由pid指定的子程序已經被暫停 而且自暫停後還沒有報告過,則返回其狀態

;

程序控制相關的幾個函式

通常,建立新的程序,都是為了立即執行新的 不同的程式。所以一般都是fork 系統呼叫建立新程序,然後使用exec 系統呼叫函式組,來建立新的位址空間,把新的程式載入進去。最終,通過exit 系統呼叫退出程序,這個函式會終結程序,並釋放該程序占用的資源。父程序可以通過wait 系統呼叫,檢視子程序是否...

linux程序相關幾個關鍵點

1 死鎖 兩個或兩個以上的程序因競爭系統資源而處於無休止的相互等待狀態,致使哪個程序也無法繼續執行。2 linux程序排程方法 define sched other 0 普通程序時間片輪轉演算法 define sched fifo 1 實時程序先進先出演算法 defien sched rr 2 實時...

linux 程序管理相關函式

對於linux 函式可以通過命令列指令 man 函式名,檢視函式相關資訊 返回當前程序的pid getpid 建立乙個程序,當執行完這行 後,將會有兩個進製執行下面的 不同的是,父程序pid大於0,子程序pid 0 同時執行 fork 和fork 類似 但是這裡子程序先執行,結束後,執行父程序 vf...