linux中fork()函数详解(转载)
一、fork入门知识
- 在Linux中fork函数是非常重要的函数,它的作用是从已经存在的进程中创建一个子进程,而原进程称为父进程。
- 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程。
- 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
#include <unistd.h>
#include <stdio.h>
int main ()
{
pid_t fpid; //fpid表示fork函数返回的值
int count=0;
printf("当前进程id: %d\n", getpid());
fpid=fork();
if (fpid < 0) {
printf("error in fork!");
} else if (fpid == 0) {
printf("我是子进程 , 我的进程id: %d , 我的子进程id: %d\n", getpid(), fpid);
count++;
} else {
printf("我是父进程 , 我的进程id: %d , 我的子进程id: %d\n", getpid(), fpid);
count++;
}
printf("统计结果是: %d\n",count);
return 0;
}
运行
结果:
当前进程id: 16948
我是父进程 , 我的进程id: 16948 , 我的子进程id: 16949
统计结果是: 1
我是子进程 , 我的进程id: 16949 , 我的子进程id: 0
统计结果是: 1
fork 被调用一次,能够返回两次,它有三种不同的返回值:
- 在父进程中,fork返回新创建子进程的进程ID;
- 在子进程中,fork返回0;
- 如果出现错误,fork返回一个负值;
fokr调用失败的原因
- 当前的进程数已经达到了系统规定的上限,这时errno的值被设置为EAGAIN
- 系统内存不足,这时errno的值被设置为ENOMEM。
fork执行完毕后,出现两个进程,fork只拷贝下一个要执行的代码到新的进程,用户态拷贝。
父进程(第一次fock)
/ \
父进程(相同) 子进程(相同)
.....
网友评论