ork函数和一般的函数有着很大区别,fork函数执行一次却返回两个值。
1. fork函数说明
在进程中使用fork函数,则会创建一个新进程,新进程则称为子进程,原进程称为父进程。由于fork函数返回两个值,则这两个进程分别带回它们各自的返回值,其中父进程的返回值是子进程的进程号,而子进程则返回0.因此,可以通过返回值来判定该进程是父进程还是子进程。
使用fork函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端等,而子进程所独有的只有它的进程号、资源使用和计时器等。因此可以看出,使用fork函数的代价是很大的,它复制了父进程中的代码段、数据段和堆栈段里的大部分内容,使得fork函数的执行速度并不很快。
2. fork函数语法
Fork()函数语法要点如表 6‑2所示
3. fork函数实例
/*fork.c*/
#include<sys/types.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
int main()
{
pid_t result;
result=fork();
if(result==-1)
{
perror("fork error");
}
else if(result==0)
{
printf("current value is %d In child process,child PID = %d\n",result,getpid());
}
else
{
printf("current value is %d In father process,father PID=%d\n",result,getpid());
}
}
编译:
[root@localhost fork]# gcc –o fork fork.c
运行的结果:
[root@localhost fork]#./fork
current value is 0 In child process,child PID = 21273
current value is 21273 In father process,father PID=21272
从结果可以看出,子进程返回值等于0,而父进程返回子进程的进程号(>0).
本文转载于唯C教育,【Linux基础】fork函数
http://www.weicedu.com/forum.php?mod=viewthread&tid=111&fromuid=4
(出处: http://www.weicedu.com/)
http://www.weicedu.com/forum.php?mod=viewthread&tid=111&fromuid=4
(出处: http://www.weicedu.com/)