Linux 程序建立 程序終止

2021-10-02 13:52:03 字數 1667 閱讀 6256

程序終止

fork

在linux中fork函式時非常重要的函式,它從已存在程序中建立乙個新程序。新程序為子程序,而原程序為父程序。

#include

pid_t fork

(void);

返回值:自程序中返回0,父程序返回子程序id,出錯返回-

1

子程序複製父程序的pcb,因此複製了父程序的程式計數器,所以和父程序執行位置相同。

vfork和fork一樣是建立子程序(複製父程序pcb),與fork不同的是兩個程序共用同乙個虛擬位址空間,為了防止呼叫棧混亂,因此父程序呼叫vfork會阻塞,阻塞到子程序exit退出或者子程序程式替換。

注:子程序不能使用return退出,子程序return退出會把所有資源釋放,到父程序執行的時候虛擬位址空間被釋放,導致程式崩潰。

exit退出會檢測vfork建立的子程序,只是釋放了子程序的pcb資源,沒有釋放父程序的虛擬位址空間。

vfork已經很少使用了,因為vfork的存在意義就是建立子程序的效率更高,但是fork通過寫實拷貝技術實現了程序建立之後vfork就很少使用了。

正常終止(可以通過 echo $? 檢視程序退出碼):

1)從main返回

2)呼叫exit

3)_exit

異常退出:

ctrl + c,訊號終止

_exit函式(系統呼叫介面)

#include

void

_exit

(int status)

;引數:status 定義了程序的終止狀態,父程序通過wait來獲取該值

exit(庫函式)
#include

void

exit

(int status)

;

exit最後也會呼叫_exit, 但在呼叫_exit之前,還做了其他工作:

執行使用者通過 atexit或on_exit定義的清理函式。

關閉所有開啟的流,所有的快取資料均被寫入

呼叫_exit

return 退出

return是一種更常見的退出程序方法。執行return n等同於執行exit(n),因為呼叫main的執行時函式會將main的返回值當做 exit的引數。

三種退出方式的測試

#include

#include

#include

#include

intmain()

三種執行結果:

return 程式退出重新整理緩衝區

exit 程式退出重新整理緩衝區

_exit 沒有重新整理緩衝區

程序建立,程序等待,程序終止

1 程序建立,2 程序等待,3 程序終止 程序建立被定義為通過父程序建立子程序的過程。fork函式 函式原型 pid t fork void 特點 1.fork函式呼叫一次,返回兩次兩次返回值得區別分別是子程序當中的返回值為0,父程序當中的返回值為新建子程序的id 將id返回給父程序的原因是沒有函式...

程序建立,終止,等待

今天我們來說一說程序的建立,終止,等待。1 程序的建立 建立乙個程序我們用到的函式是fork函式,它從已存在的程序中建立乙個新的程序,新程序為子程序,而原程序為父程序。fork函式 include pid t fork void 子程序返回0,父程序返回子程序的id,出錯返回 1。值得注意的是,父程...

終止前台程序 linux 程序管理

ps precess sstatus 程序狀態 ps aux a 顯示現行終端下所有程式 u 以使用者為主來顯示程式執行狀態 x 不宜終端機來區分 user 使用者名稱pid 執行id cpu 占用cpu百分比 mem 占用記憶體百分比 vsz占用虛擬記憶體大小 rss占用實際記憶體大小 tty終端...