通常,建立新的程序,都是為了立即執行新的 ,不同的程式。
所以一般都是fork()系統呼叫建立新程序,然後使用exec()系統呼叫函式組,來建立新的位址空間,把新的程式載入進去。
最終,通過exit()系統呼叫退出程序,這個函式會終結程序,並釋放該程序占用的資源。
父程序可以通過wait()系統呼叫,檢視子程序是否結束。
1. 獲取id
#include
#include
pid_t getpid(void)
獲取本程序id
pid_t getppid(void)
獲取父程序id
#include #include #include int main(void)
2. 建立程序-fork
#include
pid_t fork(void)
功能:建立子程序
fork的奇妙之處在於它被呼叫一次,卻返回2次,它可能有3種不同的返回值:
a. 在父程序中,fork返回新建立子程序的pid;
b. 在子程序中,fork返回0;
c. 如果出錯,fork返回乙個負值。
#include #include #include main()
在 pid=fork()之前,只有乙個程序在執行,但這條語句之後,就變成了2個程序在執行了。
這兩個程序共享**段,將要執行的下一條語句都是if(pid == 0).
兩個程序中,原來就存在的那個程序稱為「父程序」,新出現的程序稱為「子程序」。
父子程序的區別在於程序識別符號(pid)不同。
#include #include int main(void)
子程序的資料空間,堆疊空間都會從父程序得到乙個拷貝,而不是共享。
父子程序 **段是共享的。
3. vfork()
#include
#include
pid_t vfork(void)
功能: 建立子程序
#include #include int main(void)
fork vs vfork
區別:a.
fork: 子程序拷貝父程序資料段
vfork: 子程序與父程序共享資料段
b.fork: 父程序,子程序的執行順序不確定。
vfork: 子程序先執行,父程序後執行。
4. exec函式族
exec 用被執行程式替換呼叫它的程式,資料段,**段都替換掉。
區別:fork 建立乙個新程序,產生乙個新的pid;
exec 啟動乙個新程式,替換原有的程序,因此,程序pid不會變。
5.execl
#include
int execl(const char * path, const char* arg1, ...)
引數:path --- 被執行的程式名(含完整路徑)。
arg1 - argn --- 被執行程式所需的命令列引數,含程式名。以空指標(null)結束。
#include main()
6. execlp
#include
int execlp(const char* path, const char* arg1, ...)
引數:path --- 被執行程式名(不含路徑,將從path環境變數中查詢該程式)。
arg1-argn --- 被執行程式所需的命令列引數,含程式名。以空指標(null)結束。
#include main()
7. execv
#include
int execv(const char* path, char* const argv)
引數:path --- 被執行程式名(含完整路徑)。
argv --- 被執行程式所需的命令列引數陣列。
#include main()
; execv("/bin/ls", argv);
}
8. system函式
#include
int system(const char* string)
功能:呼叫fork產生子程序,由子程序來調 「/bin/sh -c string「 來執行引數 string 所指定的命令。
#include void main()
9. 程序等待
#include
#include
pid_t wait(int *status)
功能:阻塞該程序,直到其某個子程序退出。
#include #include #include #include void main()
else if(pc > 0)
exit(0);
}
程序控制部分相關函式小結
在linux系統中,對於程序進行控制的主要系統呼叫以下所示 1.fork函式 函式宣告 include include pid t fork void 以下這段話是從別人的部落格中看到的,我覺得很不錯,較為詳細地剖析了兩次返回的實質 對於fork來說,父子程序共享同一段 空間,所以給人的感覺好像是有...
程序控制2 幾個簡單API
程序建立fork fork 函式可以用來建立乙個子程序,它被呼叫一次,卻返回兩次,它可能有三種不同的返回值 在父程序中,fork返回新建立的子程序的pid 在子程序中,fork返回0 如果出現錯誤,fork返回乙個負值。通過以下 可以驗證 pid t pid fork if pid 1 if pid...
LINUX程序相關的幾個函式
linux程序相關的幾個函式 1.pid t fork void 返回值 若成功呼叫一次則返回兩個值,子程序返回0,父程序返回子程序id 否則,出錯返回 1 2.exit 0 就是退出,傳入的引數是程式退出時的狀態碼,0表示正常退出,其他表示非正常退出,一般都用 1或者1,標準c裡有exit suc...