十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
函数签名: pid_t fork(void);
在保山等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站制作、成都网站设计 网站设计制作定制网站开发,公司网站建设,企业网站建设,高端网站设计,成都全网营销,外贸网站制作,保山网站建设费用合理。
子进程中返回0,父进程中返回子进程ID,出错返回-1
函数签名:
pid_t waitpid(pid_t pid,int* stat_loc,int options);
函数签名:
pid_t getpid(void);
pid_t getppid(void); //用于获取父(parent)进程的pid
函数签名:
void eixt(int status);
示例1 创建一个这样的进程
创建一个如下的
首先你调用fork函数时,会创建一个子进程。fork会有两个返回值,一个是为0的值(父进程的PID)在父进程里执行的时候icount++ 最后printf打印的结果为3,还有一个是大于0的值(创建后的子进程PID)子进程里执行icount-- 最后打印的结果为1。 当然fork失败的时候返回值就是小于0了。
提醒一下
创建子进程时,系统并没有立即复制一个父进程的数据段、栈、堆的副本,而是由内核把父进程的这些内存设置为只读,由父子进程共享,若父子进程有任意一个试图修改该区域,内核为修改页面复制一个副本,达到父子进程互不干扰。
纯手打,希望对你有帮助!!!!!!
c语言调用函数while((p1=fork())==-1)的意思是:
fork函数是在当前进程中新建立一个子进程,如果这个创建子进程失败,那么返回-1,这个实际是把创建进程的返回值和-1比较看看是否创建失败。
因为是写在while语句里,那么当创建失败之后,如果在while里面没有break或者跳出,当while执行体执行结束后又会执行(p1=fork())==-1,等于不断重复创建子进程一直到创建成功为止。
注意这里会返回两次,因为父进程创建子进程的时候复制了父进程的地址空间,那么父子进程地址空间的语句执行都在等待fork返回的那句话里。
所以返回两次是父进程返回一个,返回的是子进程的ID,子进程返回一次,返回的是0.
那么我们根据不同的返回值就可以分别写出我们想要的父子进程的逻辑。
看起来你这段程序很难结束了。
首先父进程会创建4个子进程;
然后,因为父子进程共用代码段,于是子进程也会把for循环执行4次,每个子进程继续4个子进程;
最后,子进程创建的子进程,依然会继续创建4个子进程,所以,没完没了。
因fork会返回2个值,返回非零,是创建的子进程号,此时在父进程中;返回零是在子进程中;
所以,一般来说:应该根据fork的返回值来使代码选择不同的执行路径,简单举例:
if (fork() !=0 )
{
parent process do something
}
else
{
child process do something
}