程序控制相關的幾個函式

2021-06-07 01:29:24 字數 2951 閱讀 9593

通常,建立新的程序,都是為了立即執行新的 ,不同的程式。

所以一般都是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...