嵌入式初入门——一个项目了解Linux下文件I/O,网络socket编程,多进程,多线程,多路复用(二)

多进程

上节提到了accpet()函数处理客户端连接时,当有客户端连接时,函数会返回。那么问题来了,这样作为一个服务器就只能给一个客户端服务了,显然这样的服务器就只能拿来自己玩了。那么怎么处理这个多并发问题呢?
首先可以先用多进程实现,在accept返回后创建一个子进程负责和客户端通信,父进程继续执行accpet()。

进程ID

进程:正在运行的程序及其占用的资源(CPU、内存、系统资源等)叫做进程(操作系统原理)。是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位
进程ID:每一个运行的进程都有自己独一无二的PID(Process ID)——进程ID。Linux 中维护着一个数据结构叫做进程表,保存当前加载在内存中的所有进程的有关信息,其中包括进程的、进程的状态、 命令字符串等,操作系统通过进程的 PID 对它们进行管理,这些 PID 是进程表的索引。
init进程:Linux内核在启动的后阶段会创建init进程来执行程序/sbin/init,该进程是系统运行的第一个进程,进程号为 1,称为 Linux 系统的初始化进程,该进程会创建其他子进程来启动不同写系统服务,而每个服务又可能创建不同的子进程来执行不同的程序。所以init进程是所有其他进程的“祖先”。

fork()系统调用

"fork"见名思义就是分叉的意思,主进程通过fork()系统调用我们可以创建一个和当前进程印象一样的新进程.我们通常将新进程称为子进程,而当前进程称为父进程。内核将父进程的用户地址空间的内容复制给子进程,这样父子进程拥有各自独立的用户空间,当父进程修该变量的值时不会影响子进程中的相应变量。
子进程具体会继承父进程哪些东西,又不会继承哪些东西呢?(面试考点!!!)

用户号UIDs和用户组号GIDs
环境Environment
堆栈
共享内存
打开文件的描述符(所以实现进程之间通信时可以采用管道通信方式)
执行时关闭(Close-on-exec)标志
信号(Signal)控制设定
进程组号
当前工作目录
根目录
文件方式创建屏蔽字
资源限制
控制终端

子进程独有

进程号PID
不同的父进程号
自己的文件描述符和目录流的拷贝
子进程不继承父进程的进程正文(text),数据和其他锁定内存(memory locks)
不继承异步输入和输出

父进程和子进程拥有独立的地址空间和PID参数。

链接1:https://www.nowcoder.com/questionTerminal/d86fd6f986e24bc2bb67e8b7a919eea7
链接2:https://blog.csdn.net/ygm_linux/article/details/50683877

在我们编 程的过程中,一个函数调用只有一次返回(return),但由于fork()系统调用会创建一个新的进程,这时它会有两次返回。一次返回是给父进程,其返回值是子进程的PID(Process ID),第二次返回是给子进程,其返回值为0。所以我们在调用fork()后,需要通 过其返回值来判断当前的代码是在父进程还是子进程运行,如果返回值是0说明现在是子进程在运行,如果返回值>0说明是父进程在运行,而如果返回值<0的话,说明fork()系统调用出错。fork 函数调用失败的原因主要有两个:

  1. 系统中已经有太多的进程,内存不足,这时errno的值被设置为ENOMEM;
  2. 该实际用户 ID 的进程总数超过了系统限制,这时errno的值被设置为EAGAIN。

fork使用过程中应该注意:

  1. 子进程还是父进程先运行,没有确切的规定,由操作系统的具体的调度实现。如果需要确保让父进程或子进程先执行,则需要程序员在代码中通过进程间通信的机制来自己实现。
  2. 子进程并不是从头开始,因为在fork()之前,父进程已经为子进程搭建好了运行环境了。所以字节
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值