下面是一個(gè)快速瀏覽使用`fork()`函數(shù)創(chuàng)建進(jìn)程的簡(jiǎn)單演示代碼:
```c
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t pid = fork(); // 創(chuàng)建子進(jìn)程
if (pid == -1) {
// fork()失敗,出現(xiàn)錯(cuò)誤
printf("創(chuàng)建子進(jìn)程失敗!\n");
} else if (pid == 0) {
// 子進(jìn)程代碼
printf("這是子進(jìn)程!\n");
printf("子進(jìn)程的PID:%d\n", getpid());
printf("父進(jìn)程的PID:%d\n", getppid());
} else {
// 父進(jìn)程代碼
printf("這是父進(jìn)程!\n");
printf("父進(jìn)程的PID:%d\n", getpid());
printf("子進(jìn)程的PID:%d\n", pid);
}
return 0;
}
```
上述代碼使用了`fork()`函數(shù)創(chuàng)建了一個(gè)子進(jìn)程。當(dāng)調(diào)用`fork()`函數(shù)時(shí),操作系統(tǒng)會(huì)創(chuàng)建一個(gè)新的進(jìn)程,并將父進(jìn)程的所有內(nèi)容復(fù)制給子進(jìn)程。然后,`fork()`函數(shù)返回兩次:在父進(jìn)程中返回子進(jìn)程的PID(大于0),在子進(jìn)程中返回0。通過(guò)判斷返回值,我們可以區(qū)分父進(jìn)程和子進(jìn)程的執(zhí)行代碼。
在上述代碼中,父進(jìn)程和子進(jìn)程分別輸出自己的進(jìn)程類(lèi)型(父進(jìn)程或子進(jìn)程)以及對(duì)應(yīng)的進(jìn)程ID(PID)。通過(guò)調(diào)用`getpid()`函數(shù)獲取當(dāng)前進(jìn)程的PID,調(diào)用`getppid()`函數(shù)獲取父進(jìn)程的PID。
當(dāng)運(yùn)行上述代碼時(shí),會(huì)輸出類(lèi)似以下內(nèi)容的結(jié)果:
```
這是父進(jìn)程!
父進(jìn)程的PID:1234
子進(jìn)程的PID:1235
這是子進(jìn)程!
子進(jìn)程的PID:1235
父進(jìn)程的PID:1
```
以上是一個(gè)簡(jiǎn)單的`fork()`函數(shù)創(chuàng)建進(jìn)程的操作演示,通過(guò)創(chuàng)建子進(jìn)程,我們可以實(shí)現(xiàn)多進(jìn)程的并發(fā)執(zhí)行,進(jìn)行一些并行計(jì)算、任務(wù)分發(fā)等操作。