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