Uinx环境高级编程之fork()的学习总结

目录

 

什么是进程

什么是线程

进程与线程有什么区别

父子进程共享的东西

父子进程不共享的东西

子进程继承父进程的东西

父子进程的区别

fork函数失败的主要原因

写时拷贝技术COW(Copy-On-Write)

fork函数的两种基本使用方法


  • 什么是进程

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

  • 什么是线程

线程,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。

  • 进程与线程有什么区别

1、功能不同

进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。

2、工作原理不同

在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

线程是独立调度和分派的基本单位。线程可以为操作系统内核调度的内核线程,如Win32线程;由用户进程自行调度的用户线程,如Linux平台的POSIX Thread;或者由内核与用户进程,如Windows 7的线程,进行混合调度。

3、作用不同

进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。

通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。

  • 父子进程共享的东西

  1. 文件共享
  2. 文件偏移量共享
  • 父子进程不共享的东西

  1. 数据空间、堆、栈;(在调用fork()函数之后,子进程会得到父进程的​​​​​​​数据空间、堆、栈的副本,父子进程之间并不共享这段存储空间

  • 子进程继承父进程的东西​​​​​​​

  1. ​​​​​​​实际用户ID、实际组ID、有效用户ID、有效组ID;

  2. 附属组ID;

  3. 进程组ID;

  4. 会话ID;

  5. 控制终端;

  6. 设置用户ID标志和设置组ID标志;

  7. 当前工作目录;

  8. 根目录;

  9. 文件模式创建屏蔽字;

  10. 信号屏蔽和安排;

  11. 对任一打开文件描述符的执行时关闭(close-on-exec)标志;

  12. 环境;

  13. 连接的共享存储段;

  14. 存储映像;

  15. 资源限制;

  • 父子进程的区别

  1. fork的返回值不同(父进程返回值大于0,即进程的ID;子进程返回值为0);

  2. 进程ID不同;

  3. 这两个父子进程的父进程ID也不同,子进程的父进程ID为创建的进程的ID(可以使用getppid()函数获取),父进程的父进程ID则不变;

  4. 子进程不继承父进程设置的文件锁;

  5. 子进程未处理的闹钟被清除;

  6. 子进程未信号集设置为空;

  • fork函数失败的主要原因

  1. 系统中有太多的进程;

  2. 实际用户ID的进程数超过了系统的限制;(在CHILD_MAX规定了每个实际用户ID在任何一时刻拥有的最大进程数。)

  • 写时拷贝技术COW(Copy-On-Write)

​​​​​​​将数据空间、堆、栈这些区域由父进程和子进程共享,并且内核将他们的访问权限设置为只读。如果父子进程试图修改这些区域时,内核则只需将所要修改的区域的那段内存制作一个副本,通常是系统中的一页。这样就可以减少fork调用的内存的消耗,实现了写时拷贝。

  • fork函数的两种基本使用方法

  1. 父进程希望复制自己,使得父进程和子进程去执行不同的代码段。这主要用于网络服务进程中最常见的。例如:父进程等待客户端服务请求(accept()),而这种服务请求到达后,父进程调用fork()函数,使得子进程去处理客户端的请求服务,父进程则继续等待下一个服务请求的到来。(详情见博客:https://blog.csdn.net/qq_44045338/article/details/104308952
  2. 一个程序需要执行一个不同的程序时。调用fork返回立即调用exec()函数。

 

发布了47 篇原创文章 · 获赞 37 · 访问量 3703

猜你喜欢

转载自blog.csdn.net/qq_44045338/article/details/104812814