使用fork创建一个新进程
以下内容摘自unix环境高级编程
由fork创建的新进程被称为子进程 ,fork函数被调用一次,但返回两次。父进程返回值是子进程的进程ID,子进程的返回值是0
#include <unistd.h>
pid_t fork(void);
进程执行fork调用之后的指令。子进程是父进程的副本
子进程会继承父进程的很多属性,包括:
- 实际用户ID、实际组ID、有效用户ID、有效组ID
- 附属组ID
- 进程组ID
- 会话ID
- 控制终端
- 设置用户ID标志和设置组ID标志
- 当前工作目录
- 根目录
- 文件模式创建屏蔽字
- 信号屏蔽和安排
- 对任一打开文件描述符的执行时关闭标志
- 环境
- 连接的共享存储段
- 存储映像
- 资源限制
- 文件偏移量
父进程和子进程之间的区别具体如下。
- fork的返回值不同
- 进程ID不同
- 这两个进程的父进程ID不同:子进程的父进程ID是创建它的进程的ID、而父进程的父进程ID则不变
- 子进程的tms_utime、tms_stime、tms_cutime和tms_ustime的值设置为0
- 子进程不继承父进程设置的文件锁
- 子进程的未处理闹钟被清除
- 子进程的未处理信号集设置为空集.
使fork失败的主要原因由两个:1、系统有太多经常 2、实际用户ID拥有的进程数超过了系统限制CHILD_MAX