2006-11-02, 03:17 AM
|
#2 (permalink)
|
註冊會員
|
這要在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 。
|
|
|
|
送花文章: 23,
收花文章: 5 篇, 收花: 9 次
|