Posted on 2008-07-06 23:40
MichaelCao 閱讀(9381)
評論(8) 編輯 收藏 引用 所屬分類:
OS
我總算有點眉目了.原來在fork()之后系統就有兩個一樣的進程了.以前一直暈,兩個一樣的進程?那有什么用啊?其實是fork()這個函數會返回兩次而已.對于子進程,得到的是0,而對于父進程,得到卻是子進程的pid,這樣根據得到不同的pid,然后兩個進程就可以進行不一樣的運行了.并且子進程繼承了父進程的數據段,代碼段,這個也就是說變量阿還是有的,代碼阿還是會運行的.
貼點代碼稍稍解釋一下:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
int main(void)
{
pid_t pid=fork();
if(pid==0)
{
int j ;
for(j=0;j<10;j++)
{
printf("child: %d\n",j);
sleep(1);
}
}
else if (pid>0)
{
int i;
for(i=0;i<10;i++)
{
printf("parent: %d\n",i);
sleep(1);
}
}
else
{
fprintf(stderr,"can't fork ,error %d\n",errno);
exit(1);
}
printf("This is the end !");
}
運行了這段代碼,我想應該所有人都應該了解fork了吧.運行的時候可以查看進程(ps -aux),會發現有兩個一樣的進程,運行結束后最后一句printf會運行兩次,因為每個進程都會運行一次.中間的交替就是進程的調度了.我也是剛剛明白,還有很多東西要深刻理解.總算有點眉目了.很爽.