函数签名: pid_t fork(void);
创新互联主营玛多网站建设的网络公司,主营网站建设方案,app开发定制,玛多h5小程序定制开发搭建,玛多网站营销推广欢迎玛多等地区企业咨询
子进程中返回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了。
提醒一下
创建子进程时,系统并没有立即复制一个父进程的数据段、栈、堆的副本,而是由内核把父进程的这些内存设置为只读,由父子进程共享,若父子进程有任意一个试图修改该区域,内核为修改页面复制一个副本,达到父子进程互不干扰。
纯手打,希望对你有帮助!!!!!!
1、fork一般用于处理多线程任务。比如在网络中,需要同时发送多种请求报文,则可以fork出子进程来进行发包任务,而父进程则直接去做自己的逻辑任务。
2、所谓运行时间指的是已经运行了多长时间还是从进程创建到进程退出的时间?输入的程序是由程序启动还是已经在运行的
,如果是已经存在的,就试着去获取进程创建时间(WIN32
提供这样的API),然后获取当前时间,就可以得到进程已经运行了多久。如果是程序启动的,那就用类似time这种函数打桩就可以了。
看起来你这段程序很难结束了。
首先父进程会创建4个子进程;
然后,因为父子进程共用代码段,于是子进程也会把for循环执行4次,每个子进程继续4个子进程;
最后,子进程创建的子进程,依然会继续创建4个子进程,所以,没完没了。
因fork会返回2个值,返回非零,是创建的子进程号,此时在父进程中;返回零是在子进程中;
所以,一般来说:应该根据fork的返回值来使代码选择不同的执行路径,简单举例:
if (fork() !=0 )
{
parent process do something
}
else
{
child process do something
}
fork一般用于处理多线程任务。比如在网络中,你需要同时发送多种请求报文,则可以fork出子进程来进行发包任务,而父进程则直接去做自己的逻辑任务。
学习函数可以从功能入手,看它能够实现那些特定的需求。网络上给的只能是教科书似的定义,要是你想收获更多,建议看一些开源代码。
c语言调用函数while((p1=fork())==-1)的意思是:
fork函数是在当前进程中新建立一个子进程,如果这个创建子进程失败,那么返回-1,这个实际是把创建进程的返回值和-1比较看看是否创建失败。
因为是写在while语句里,那么当创建失败之后,如果在while里面没有break或者跳出,当while执行体执行结束后又会执行(p1=fork())==-1,等于不断重复创建子进程一直到创建成功为止。
注意这里会返回两次,因为父进程创建子进程的时候复制了父进程的地址空间,那么父子进程地址空间的语句执行都在等待fork返回的那句话里。
所以返回两次是父进程返回一个,返回的是子进程的ID,子进程返回一次,返回的是0.
那么我们根据不同的返回值就可以分别写出我们想要的父子进程的逻辑。