Linux环境 fork() 解析

一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程

fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
1)在父进程中,fork返回新创建子进程的进程ID;
2)在子进程中,fork返回0;
3)如果出现错误,fork返回一个负值;

实例:

/************************************************************************* > File Name: fork_test.c > Author: > Mail: > Created Time: 2016年06月06日 星期一 09时29分05秒 ************************************************************************/ #include <unistd.h> #include <stdio.h> int main () { pid_t fpid; //fpid表示fork函数返回的值 int count=0; fpid=fork(); if (fpid < 0) printf("error in fork!"); else if (fpid == 0) { printf("child process| process id= %d | fpid= %d |parentid = %d \n",getpid(),fpid,getppid()); count++; } else { printf("parent process| process id= %d | fpid = %d |parentid = %d\n",getpid(),fpid,getppid()); count++; } printf("统计结果是: %d \n",count); getchar(); return 0; }

这里写图片描述

fork出错可能有两种原因:
1)当前的进程数已经达到了系统规定的上限,这时errno的值被设置为EAGAIN。
2)系统内存不足,这时errno的值被设置为ENOMEM。

二、fork进阶知识

实例

#include <unistd.h> #include <stdio.h> int main(void) { int i=0; printf("i son/pa ppid pid fpid \n"); //ppid指当前进程的父进程pid //pid指当前进程的pid, //fpid指fork返回给当前进程的值 for(i=0;i<2;i++){ pid_t fpid=fork(); if(fpid==0) printf("i=%d | child ppid=%4d |pid=%4d |fpid=%4d \n",i,getppid(),getpid(),fpid); else printf("i=%d | parent ppid=%4d |pid=%4d |fpid=%4d \n",i,getppid(),getpid(),fpid); } getchar(); return 0; }

运行结果

这里写图片描述

查看进程

这里写图片描述

分析

Linux环境 fork() 解析

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/14187.html