查看單個文章
舊 2006-11-02, 03:17 AM   #2 (permalink)
kinco
註冊會員
榮譽勳章
UID - 248756
在線等級: 級別:8 | 在線時長:113小時 | 升級還需:4小時級別:8 | 在線時長:113小時 | 升級還需:4小時級別:8 | 在線時長:113小時 | 升級還需:4小時
註冊日期: 2003-02-06
VIP期限: 2007-04
住址: 台北.中和
文章: 507
精華: 0
現金: 0 金幣
資產: 670 金幣
預設

這要在LINUX上執行喔...

引用:
關於 fork():
#include <stdio.h>

void main(void)
{
int pid,i;

pid = fork();
if (pid == 0) {
for (i=0;i<44;i++) {
printf(" I am a child process I say %d\n",i);
sleep(1);
}
exit(1);
}
else if (pid > 0) {
for (i=0;i<40;i++) {
printf(" I am a parent process I say %d\n",i);
sleep(1);
}
}
else if (pid < 0)
printf(" Sorry .....I can't fork my self\n");
}

解釋一下 fork() 是怎麼動作的:
原來的 process
+---------+
| Data |
+---------+
| Code |---> PC
+---------+

執行 fork() 之後

原來的 process fork 出來的 process
+----------+ 複製 Data Code 到 +----------+
| Data | ===================> | Data |
+----------+ +----------+
| Code |---> CP = CP+1; | Code |----> CP = CP+1
+----------+ +----------+
由上圖可以看出原來的 process 和 fork 出來的 process 不論是變數、程式碼都是一模一樣的,唯一不同的是 fork() 的返回值,parent process 的返回值是 child process 的 PID ,而 child process 的返回值是 0 ,因此在程式實作上就以 fork() 的返回值來判斷那一個是 parent 那一個是 child 。
kinco 目前離線  
送花文章: 23, 收花文章: 5 篇, 收花: 9 次
回覆時引用此帖
有 2 位會員向 kinco 送花:
mini (2006-11-02),saltv2 (2006-11-02)
感謝您發表一篇好文章