Posted on 2008-07-06 23:40
MichaelCao 閱讀(9381)
評(píng)論(8) 編輯 收藏 引用 所屬分類:
OS
我總算有點(diǎn)眉目了.原來(lái)在fork()之后系統(tǒng)就有兩個(gè)一樣的進(jìn)程了.以前一直暈,兩個(gè)一樣的進(jìn)程?那有什么用啊?其實(shí)是fork()這個(gè)函數(shù)會(huì)返回兩次而已.對(duì)于子進(jìn)程,得到的是0,而對(duì)于父進(jìn)程,得到卻是子進(jìn)程的pid,這樣根據(jù)得到不同的pid,然后兩個(gè)進(jìn)程就可以進(jìn)行不一樣的運(yùn)行了.并且子進(jìn)程繼承了父進(jìn)程的數(shù)據(jù)段,代碼段,這個(gè)也就是說(shuō)變量阿還是有的,代碼阿還是會(huì)運(yùn)行的.
貼點(diǎn)代碼稍稍解釋一下:
#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 !");
}
運(yùn)行了這段代碼,我想應(yīng)該所有人都應(yīng)該了解fork了吧.運(yùn)行的時(shí)候可以查看進(jìn)程(ps -aux),會(huì)發(fā)現(xiàn)有兩個(gè)一樣的進(jìn)程,運(yùn)行結(jié)束后最后一句printf會(huì)運(yùn)行兩次,因?yàn)槊總€(gè)進(jìn)程都會(huì)運(yùn)行一次.中間的交替就是進(jìn)程的調(diào)度了.我也是剛剛明白,還有很多東西要深刻理解.總算有點(diǎn)眉目了.很爽.