Posted on 2009-04-15 23:10
Prayer 閱讀(445)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
LINUX/UNIX/AIX
pid_t pid;
int stat_loc;
/*父進(jìn)程*/
if ((pid=fork())>0) {
waitpid(pid,&stat_loc,0);
/*父進(jìn)程等待進(jìn)程號(hào)為pid的子進(jìn)程的返回*/
}
else {
/*子進(jìn)程的處理過(guò)程*/
exit(1);
}
/*父進(jìn)程*/
printf("stat_loc is [%d]\n",stat_loc);
子進(jìn)程fork返回0。理由:隨時(shí)可以調(diào)用getpid()知道自己的pid是多少,所以沒(méi)必要fork返回pid
原帖由 dida_327 于 2005-12-14 15:46 發(fā)表
pid_t pid;
int stat_loc;
/*父進(jìn)程*/
if ((pid=fork())>0) {
waitpid(pid,&stat_loc,0);
/*父進(jìn)程等待進(jìn)程號(hào)為pid的子進(jìn)程的返回*/
}
else {
/*子進(jìn)程的處理過(guò)程*/
exit(1);
}
/*父 ...
你這段程序有問(wèn)題吧,其實(shí)fork很簡(jiǎn)單,
1、返回兩次,向父進(jìn)程返回PID,向自己返回0;
2、子進(jìn)程拷貝交進(jìn)程數(shù)據(jù)段、堆區(qū)、棧區(qū);(不過(guò)大多采用寫時(shí)復(fù)制技術(shù)),一般來(lái)講,共享正文段;
所以,一般是這樣的:
pid=fork();
if(pid>0) //父
{
}
else if(pid==0) //子
{
}
else //出錯(cuò)
{
}
以下為父子共享的(前提是父/子中沒(méi)有退出^o^)所以,剩下的就是同步與互斥的問(wèn)題了,扯遠(yuǎn)了。個(gè)人覺(jué)得《Unix環(huán)境高級(jí)編程》第8章開(kāi)始那個(gè)例子,又簡(jiǎn)單又經(jīng)典!
其實(shí)所有的代碼父子進(jìn)程都是共享的,
就連 if ( pid > 0 ) else 也是。
原帖由 思平 于 2005-12-15 15:36 發(fā)表
其實(shí)所有的代碼父子進(jìn)程都是共享的,
就連 if ( pid > 0 ) else 也是。
正因?yàn)槭撬泄蚕恚判枰@樣的判斷噻,否則就用不著了……