Linux中“fork()”是一個系統調用函數,用于創建一個新的進程,會創建當前進程的一個副本,稱為子進程,子進程與父進程幾乎完全相同,包括代碼、數據以及打開的文件描述符等,其原型為“pid_t fork(void);”。
在Linux中,fork()是一個系統調用函數,用于創建一個新的進程。該函數會創建當前進程的一個副本,稱為子進程。子進程與父進程幾乎完全相同,包括代碼、數據以及打開的文件描述符等。
fork()函數的原型如下:
#include?<sys/types.h> #include?<unistd.h> pid_t?fork(void);
登錄后復制
其中,pid_t是一個整數類型,用于表示進程ID(PID)。fork()函數沒有參數。
fork()函數調用后會有兩個返回值:
-
在父進程中,fork()返回子進程的PID(子進程的ID)。
在子進程中,fork()返回0。
因此,可以通過判斷fork()的返回值來確定當前代碼是在父進程中執行還是在子進程中執行。
下面是一個簡單的示例代碼,演示了fork()函數的基本用法:
#include?<stdio.h> #include?<unistd.h> int?main()?{ ????pid_t?pid?=?fork(); ????if?(pid?<?0)?{ ????????fprintf(stderr,?"Fork?failed. "); ????????return?1; ????} ????else?if?(pid?==?0)?{ ????????printf("This?is?the?child?process.?PID:?%d ",?getpid()); ????} ????else?{ ????????printf("This?is?the?parent?process.?Child?PID:?%d ",?pid); ????} ????return?0; }
登錄后復制
在上述代碼中,我們調用了fork()函數并根據返回值判斷當前是在父進程還是子進程。在父進程中,我們打印子進程的PID;在子進程中,我們打印自己的PID。
需要注意的是,fork()函數會將父進程的內存完全復制給子進程,包括堆、棧和全局變量等。因此,在fork()之后,父進程與子進程會分別執行各自的代碼,互不干擾。