加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_宿迁站长网 (https://www.0527zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux系统编程之进程(二) fork函数相关总结

发布时间:2016-01-23 07:07:46 所属栏目:Linux 来源:网络整理
导读:fork的作用是根据一个现有的进程复制出一个新进程,原来的进程称为父进程(Parent Process),新进程称为子进程(Child Process)。系统中同时运行着很多进程,

(1)、使用fork函数得到的子进程从父进程的继承了整个进程的地址空间,包括:进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设置、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端等。

linux系统编程之进程(二) fork函数相关总结

(2)、子进程与父进程的区别在于:

1、父进程设置的锁,子进程不继承

2、各自的进程ID和父进程ID不同

3、子进程的未决告警被清除;

4、子进程的未决信号集设置为空集。

(3)、fork系统调用需要注意的地方

fork系统调用之后,父子进程将交替执行。

如果父进程先退出,子进程还没退出那么子进程的父进程将变为init进程。(注:任何一个进程都必须有父进程)

如果子进程先退出,父进程还没退出,那么子进程必须等到父进程捕获到了子进程的退出状态才真正结束,否则这个时候子进程就成为僵进程。

子进程退出会发送SIGCHLD信号给父进程,可以选择忽略或使用信号处理函数接收处理就可以避免僵尸进程。

(4)、写时复制 copy on write

如果多个进程要读取它们自己的那部分资源的副本,那么复制是不必要的。

每个进程只要保存一个指向这个资源的指针就可以了。

如果一个进程要修改自己的那份资源的“副本”,那么就会复制那份资源。这就是写时复制的含义

例如fork就是基于写时复制,只读代码段是可以共享的。

若使用vfork()则在还没调用exec之前,父子进程是共享同一个地址空间,不像fork()一样会进行拷贝

(5)、fork之后父子进程共享文件

linux系统编程之进程(二) fork函数相关总结

子进程继承了父进程打开的文件描述符,故每个打开文件的引用计数为2。

(编辑:云计算网_宿迁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!