linux中fork()函数详解
来源:互联网 发布:软件企业评估规范 编辑:程序博客网 时间:2024/05/13 21:27
fork函数原型如下:
pid_t fork(void);
fork函数的功能:创建一个子进程
fork函数的特性:调用一次却返回两次
返回值:
零:在子进程中,fork()返回0
正数:在父进程中,fork()返回正的子进程的PID
负数:如果出错,则fork()返回-1,此时没有创建新的进程。最初的进程仍然运行。
fork出错可能有两种原因:
(1)当前的进程数已经达到了系统规定的上限,这时errno的值被设置为EAGAIN。
(2)系统内存不足,这时errno的值被设置为ENOMEM。
--------------------------------------------------------------------------------------------------------------------------------------
一个程序一旦调用fork函数,系统就新建了一个子进程,并在子进程和父进程中返回,
父子进程从fork以后的代码开始执行,但是子进程也复制了父进程fork执行点的所有上下文场景,
包括:
——全局和局部变量
——打开的文件句柄
——共享内存、消息等同步对象
子进程复制了父进程的堆栈段和数据段,和父进程共享相同的代码段。
demo如下:--------------------------------------------------------------------------------------------
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
main()
{
printf("test runtimes\n");
int b=20;
if(fork())
{
printf("i am parent process pid=%d,ppid=%d,b=%d\n",getpid(),getppid(),b);
b=80;
sleep(2);
printf("after sleep parent process b=%d\n",b);
}else{
printf("son process pid=%d,ppid=%d,b=%d\n",getpid(),getppid(),b);
sleep(2);
}
printf("pid=%d,ppid=%d,b=%d\n",getpid(),getppid(),b);
}
运行结果如下:-----------------------------------------------------------------------------
test runtimes
i am parent process pid=3659,ppid=2103,b=20
son process pid=3660,ppid=3659,b=20
after sleep parent process b=80
pid=3659,ppid=2103,b=80
pid=3660,ppid=1,b=20
结论如下:
1.printf("test runtimes\n");只运行了一次,进程从fork后一行code执行。
2.父进程和子进程数据段相互独立。
3.有几个进程,后面的公共代码就执行几次。
- linux中fork()函数详解
- linux中fork()函数详解
- linux中fork()函数详解
- linux中fork()函数详解
- linux中fork()函数详解
- linux中fork()函数详解
- linux中fork()函数详解
- linux中fork()函数详解
- linux中fork()函数详解
- linux中fork()函数详解
- linux中fork()函数详解
- linux中fork()函数详解
- linux中fork()函数详解
- linux中fork()函数详解
- linux中fork()函数详解
- linux中fork()函数详解
- linux中fork()函数详解
- linux中fork()函数详解
- ts
- JPA 批注参考
- NYOJ-28:大数阶乘
- 润乾 图形钻取后隐藏地址栏中的传递的参数
- xcode 代码颜色高亮,智能提示的问题以及解决方法
- linux中fork()函数详解
- Linux netstat命令详解
- 一个死循环
- OpenCV--旋转向量与旋转矩阵相互转化
- NopCommerce用到的开源组件
- 使用 Fabrik 组件为 Joomla 创建一个简单的留言板
- [Android] 设置控件是否可见
- Linux进程间通信
- 电路中“地”之深究——克服电磁干扰