进程:系统中的最基本的资源分配单位,由操作系统负责创建、管理和调度,进程可以看做是一个程序的执行实例。
进程的结构:
1.程序段(code segment):存放程序指令的内存区域,通常是只读。程序段是进程运行阶段不变的部分,包含了所有可执行指令,程序段在进程创建时就已经确定好。
2.数据段(data segment):数据段存储的是程序中已经初始化的全局变量、静态变量和常量等数据,数据段通常是可读写的。
3.堆栈段(stack segment):堆栈段存储着程序执行过程中产生的临时数据和函数调用的返回地址等信息,堆栈段是一个后进先出的数据结构,大小可动态扩展,可读写。
4.堆区(Heap):堆区是程序执行期间动态申请和释放内存所使用的区域,堆区是可读写的,大小可动态调整。
5.进程控制块(Process Control Block):进程控制块是系统管理进程的数据结构,包括进程的基本信息,如进程状态、进程标识符、进程优先级、程序计数器、寄存器等。还有进程的资源使用情况,打开的文件、分配的内存等。
进程的各种状态
- 运行态(Running),该进程正在CPU上运行
- 就绪态(Ready),进程已准备好,等待CPU分配时间片后就能运行。
- 阻塞态(Blocked),进程由于等待某些事件(输入/输出/信号)而无法被执行。
- 创建态(New),进程已被创建,还没有被操作系统调度运行。
- 终止态(Terminated),进程已经运行完毕或被强制终止。
使用ps aux命令的输出中,STAT表示进程状态,常见状态:
- R:程序正在运行
- S:进程处于休眠状态,等待某个事件的发送,或者正在进行I/O操作
- D:进程不可中断的休眠状态,等待排队正在块设备上的输入输出
- Z:进程被终止,父进程还未回收它的资源
- T:进程被暂停或者停止
IPC和RPC通信
IPC(Inter-Process communication)进程间通信
RPC(Remote Procedure Call)远程过程调用
IPC通信常用方式:
- 管道(Pipe):半双工通信方式,用于父子进程之间的通信。单向数据传输,用一个缓冲区作为共享区域来实现进程之间的数据交换。
- 队列消息(Message Queue):消息传递机制,用于同一主机内的进程间通信。消息队列提供异步通信方式,发送方发送可立即返回,接收方可在需要时从消息队列中取出。
- 信号量(Semaphore):用于进程同步机制,保护一段代码,在同一时刻只允许一个进程执行。
- 共享内存(shared memory):高效的进程间通信方式,将一段内存映射到过个进程的地址空间中,多个进程可以直接访问这段共享内存,从而实现数据共享。
RPC通信可通过网络实现跨主机进程之间的通信,通常方式:
- 客户端---服务端(CLient---Server)模式:客户端应用程序向服务器应用程序程序发送请求,并等待响应。服务器应用程序接收请求,执行响应的操作,并将结果返回给客户端。
- 远程对象调用(Remote Object Invocation),客户端使用远程对象代理来调用远程对象。远程对象代理掌握着远程对象的网路地址信息,将请求序列化为网络字节进行传输,然后等待远程对象返回结果。
- Web服务(Web Service),Web服务是一种基于HTTP协议实现的RPC机制。客户端通过HTTP请求访问Web服务,Web服务接收请求并调用相应的处理函数,将处理结果封装为XML或JSON格式返回个客户端。
Sytemd服务配置文件
- Linux系统的初始化系统和服务管理器。在Systemd中,每个服务对应一个配置文件,定义了服务的各种属性和行为。通常存储在/etc/systemd/system目录。
- 标准的systemd服务配置文件通常由三个部分组成:[Unit]、[Service]、[Install]
[Unit]
包含服务的基本信息和依赖关系,有如下属性
- Description,服务的描述信息
- After,指定服务所需的其他服务或者单元启动完成之后才能启动
- Requires,指定服务所需的其他服务或者单元(必须同时启动)
- Wants,服务所需的其它服务或者单验(推荐同时启动)
- Before,指定服务启动之前需要启动的服务或者单元
- Conflicts,指定服务于其它服务或单元存在冲突
[Service]
包含服务执行时的相关信息,有如下属性:
- Type,服务类型,可以是simple(直到服务退出才会返回控制权)、forking(服务启动时派生一个子进程)、oneshot(服务只运行一次)。
- ExeStart,指定服务的启动命令。
- ExeStop,指定服务的停止命令。
- Restart,服务异常退出后的重启策略,可以是no(不重启)、always(总是重启)、on-failure(仅在非0退出状态时)。
- User,指定服务所属的用户
- Group,指定服务所属的组
- Environment,服务执行时需要的环境变量
- WorkingDirectory,服务执行时的工作目录。
[Install]
包含了安装服务时的相关信息,有如下属性:
- WantedBy,服务在哪些运行级别下启动,可以是multi-user.target(多用户模式)、graphical.target(图形化模式)等.
- RequiredBy,需要该服务的其它服务或单元(必须同时启动)
- Also,需要该服务的其它服务或单元(推荐同时启动)