linux下建立程序有兩種方式即呼叫fork函式或者vfork函式
//標頭檔案
#include
pid_t fork
(void);
//返回值為0 --- 子程序
//返回值為-1 --- 建立失敗
//返回值為pid --- 父程序
pid_t vfork
(void
);
exit()是庫函式,退出前會重新整理緩衝區 ,做了一系列收尾操作後釋放資源
#inldue//標頭檔案
函式介面:
void
_exit
(int status)
;
我們可以用如下的demo觀察,exit的作用
#include
#include
intmain()
//執行結果:程式正常退出並且列印語句
_eixt() 是系統呼叫 直接釋放資源退出程序
#include
函式介面
void
_exit
(int status)
;
我們同樣用乙個demo,體會_exit的作用
#include
#include
intmain()
//執行結果,sleep三秒之後直接退出。
//標頭檔案
#include
#include
函式介面:
pid_t wait
(int
*status)
;//成功則返回等待程序的pid 失敗返回-1
我們通過,以下demo來體會wait的作用
int
main()
else
if(pid ==0)
int status;
int ret =
wait
(&status)
;printf
("%d ---- %d"
,pid,ret)
;while(1
)return0;
}
在子程序裡,無論這個sleep時間給多久,我們都可以通過返回值看到接受的程序pid,這也即是wait的特點,無則阻塞。
pid_t waitpid
(pid_t pid,
int*status,
int options)
;
引數:
waitpid較於wait最大區別在於,前者可以設定非阻塞狀態,即如果pid指定的子程序沒有結束退出,那麼waitpid不會等待。
首先我們來看exece函式族
int
execl
(const
char
*path,
const
char
*arg,..
.);int
execlp
(const
char
*file,
const
char
*arg,..
.);int
execle
(const
char
*path,
const
char
*arg,..
.,char
*const envp)
;int
execv
(const
char
*path,
char
*const ar**)
;int
execvp
(const
char
*file,
char
*const ar**)
;int
execve
(const
char
*file,
char
*const ar**,
char
*const envp)
;
上面六個函式本質上,最終都呼叫的是execve這個系統呼叫函式,在以上函式裡
l表示引數用列表,v代表引數用vector,p代表預設環境變數,e代表手動維護環境變數。
例如我們這裡用其中的兩個作為展示
#include
#include
#include
intmain()
linux 程序控制
什麼是程序 每乙個程序在系統中都有唯一的id標示它,此id為程序標示符 程序標示符的型別 pit t,其實是乙個無符號整形 乙個程序標示符對應唯一的乙個程序,多個程序標示符可以對應同乙個程式 程序和程式的區別 程式 可執行的二進位制 檔案,這種檔案載入到記憶體中執行就得到了乙個程序 程序 同乙個程式...
Linux程序控制
linux程序控制 獲取pid include include pid t getpdi void 獲取本程序id pdi t getppid vodi 獲取父程序id,及獲取建立子程序的程序id 程序建立 include pid t fork void 建立子程序 呼叫一次返回兩次值 1.父程序中...
linux程序控制
linux程序控制 編寫命令直譯器 一 背景 之前在 計算機作業系統 這本書中已經多次接觸了程序這一概念,而程序在作業系統中具體是做什麼的呢?卻沒有實際的與程序發生過互動,因此也就沒有實際的感受。對於我來說程序僅僅停留在概念的層面上 程序是程式執行時的記憶體空間和設定或者說程序就是程式的進行時。沒有...