在UNIX中,fork()函數用于創建一個新的進程。該函數會創建一個當前進程的副本,其中包括進程的代碼、數據和堆棧等信息。新創建的進程稱為子進程,原始進程稱為父進程。
fork()函數的語法如下:
#include <unistd.h>
pid_t fork(void);
該函數沒有參數,返回值為pid_t類型,即進程ID。fork()函數在父進程中返回子進程的ID,在子進程中返回0。
以下是fork()函數的使用示例:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
pid_t pid;
pid = fork();
if (pid < 0) {
fprintf(stderr, "Fork failed\n");
exit(1);
} else if (pid == 0) {
// 子進程
printf("Child process\n");
} else {
// 父進程
printf("Parent process\n");
}
return 0;
}
在上述示例中,首先聲明了一個pid_t類型的變量pid,然后調用fork()函數。根據fork()函數的返回值,我們可以判斷當前的進程是父進程還是子進程。
如果fork()函數返回值小于0,則表示創建子進程失敗。在這種情況下,我們可以通過錯誤輸出函數fprintf()打印錯誤信息,并通過exit()函數退出程序。
如果fork()函數返回值等于0,則表示當前進程為子進程。在這種情況下,我們可以在子進程中執行一些特定的操作。
如果fork()函數返回值大于0,則表示當前進程為父進程。在這種情況下,我們可以在父進程中執行一些特定的操作。
需要注意的是,fork()函數會復制當前進程的所有內容給子進程,包括進程的代碼、數據、堆棧等。因此,父進程和子進程之間是相互獨立的,它們擁有自己獨立的變量和執行順序。