如何唯一标识一个进程

news2025/1/15 12:54:50

如何唯一标识一个进程

进程ID (PID):
每个运行中的进程都有一个全局唯一的整数标识符,称为进程ID(Process ID)。PID由内核分配,并在整个系统范围内保持唯一。
在shell中输入echo $$来查看当前shell的进程ID,或者使用ps命令查看所有进程及其PID。

网络通信中的进程标识:
网络层ip地址可以唯一标识网络中的主机
传输层端口+协议可以唯一标识主机中的应用程序(进程),
这样利用三元组(ip地址,端口,协议)就可以标识网络的进程。

例如,TCP/IP协议中,(主机A, 端口X, TCP)就可以唯一标识主机A上监听端口X的某个TCP服务进程。

在这里插入图片描述

服务器如何区分各个客户端?

IP地址和端口号: 四元组(客户端IP、客户端端口、服务器IP、服务器端口)就可以唯一标识这次连接。 对于TCP/IP协议,服务器通过监听特定端口,并且处理来自不同客户端IP和端口的连接请求来区分不同的客户端。
在这里插入图片描述

套接字(Socket): 在操作系统层面,当一个客户端与服务器建立连接时,服务器会为该客户端创建一个新的套接字。这个套接字包含了上述四元组信息,操作系统使用这些信息管理每个连接,使得服务器能够知道哪个响应应该发回给哪个客户端。

Session ID或Cookie: 在应用层面上,特别是Web服务中,服务器可以使用会话ID(Session ID)或者Cookie来区分不同用户。 当客户端首次连接到服务器时,服务器会给客户端生成并返回一个会话ID,之后客户端在后续请求中将这个ID随同请求头一起发送给服务器,这样服务器就能根据ID找到对应的会话状态,从而识别出不同的客户端。

身份验证令牌(Authentication Tokens): 类似于Session ID,现代Web应用和服务经常使用JSON Web Tokens (JWT) 或其他形式的身份验证令牌来进行客户端身份验证和跟踪。 客户端在经过认证后获得一个签名的令牌,随后每次请求都需要携带此令牌,服务器通过对令牌进行验证来确认客户端的身份和权限。

多路复用技术下的标识符: 在某些情况下,如HTTP/2和WebSocket等支持多路复用的协议下,即使在一个TCP连接中也可以通过流ID(Stream ID)等方式区分多个并发请求或消息,以服务于多个逻辑上的客户端操作。

在这里插入图片描述

进程之间如何通信?

本地的进程间

本地的进程间通信(IPC,Inter-Process Communication)是指在同一台计算机上的不同进程中进行数据和控制信息交换。
消息队列(Message Queue): 消息队列允许多个进程间通过在内核中创建的消息队列发送消息。每个消息都有一个类型,接收者可以根据消息类型从队列中读取消息。

共享内存(Shared Memory): 共享内存是最快的进程间通信方式之一,它让多个进程可以直接访问同一块物理内存区域,从而达到高效的数据共享。 需要使用同步机制(如信号量)来防止数据竞争。

网络进程之间

网络进程间通信(IPC,Inter-Process Communication)是指跨越不同计算机系统上的进程进行数据交换和协作。

套接字(Sockets): 在创建一个套接字之后,一个进程通常会绑定到本地IP地址和端口上,并监听来自其他进程或客户端的连接请求。另一端的进程则会发起连接至服务器指定的IP地址和端口,从而建立一条两端进程间的通信信道。

远程过程调用(RPC,Remote Procedure Call): RPC为程序员提供了像调用本地函数一样调用远程机器上的函数的能力,隐藏了底层网络通信细节。例如,ONC/RPC(开放网络计算_RPC)、gRPC等。

Web服务: 通过HTTP/HTTPS协议,不同的进程可以作为客户端和服务端进行交互 例如RESTful API、SOAP Web服务等,这些都构建在HTTP之上的应用层协议。

消息队列中间件: 消息队列(如RabbitMQ、Apache Kafka、ActiveMQ等)可以让分布在网络中的进程通过发布和订阅消息的方式进行异步通信,消息中间件负责处理网络传输和消息路由。

分布式服务框架: 微服务架构中使用的分布式服务框架如gRPC、Thrift、Dubbo等也提供了跨网络环境下的进程间通信功能。

在这里插入图片描述

参考:

计算机网络基础及 TCP、HTTP 协议详解
TCP三次握手与四次挥手(详解)
OSI网络模型 + TCP三次握手、四次挥手 + Socket、TCP、HTTP三者之间的区别和原理
解决端口冲突问题(查询端口占用进程并kill) 1. 查看端口占用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1401171.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 基于 SpringBoot+Vue 的社区团购系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

《Linux C编程实战》笔记:信号的捕捉和处理

Linux系统中对信号的处理主要由signal和sigaction函数来完成&#xff0c;另外还会介绍一个函数pause&#xff0c;它可以用来响应任何信号&#xff0c;不过不做任何处理 signal函数 #include <signal.h> void (*signal(int signum, void (*handler)(int)))(int);可以分解…

拿捏!相关性分析,一键出图!皮尔逊、斯皮尔曼、肯德尔、最大互信息系数(MIC)、滞后相关性分析,直接运行!独家可视化程序!

适用平台&#xff1a;Matlab2020及以上 相关性分析是一种统计方法&#xff0c;用于衡量两个或多个变量之间的关系程度。通过相关性分析&#xff0c;我们可以了解变量之间的相互关系、依赖性&#xff0c;以及它们是如何随着彼此的变化而变化的。相关性分析通常包括计算相关系数…

DBA技术栈MongoDB: 数据增改删除

该博文主要介绍mongoDB对文档数据的增加、更新、删除操作。 1.插入数据 以下案例演示了插入单个文档、多个文档、指定_id、指定多个索引以及插入大量文档的情况。在实际使用中&#xff0c;根据需求选择适合的插入方式。 案例1&#xff1a;插入单个文档 db.visitor.insert({…

【Python】--- 基础语法(1)

目录 1.变量和表达式2.变量和类型2.1变量是什么2.2变量的语法2.3变量的类型2.3.1整数2.3.2浮点数&#xff08;小数&#xff09;2.3.3字符串2.3.4布尔2.3.5其他 2.4为什么要有这么多类型2.5动态类型特征 3.注释3.1注释的语法3.2注释的规范 结语 1.变量和表达式 对python的学习就…

数据库课程设计-图书管理系统数据库设计

目录 一、实验目的 二、实验内容 三、实验要求 四、实验设计 4.1需求分析 4.1.1系统目标 4.1.2功能需求 4.1.3性能需求 4.14界面需求 4.2概念模型设计 4.2.1 实体及联系 4.2.2 E-R图 4.3 逻辑设计 4.3.1 E-R模型向关系模型的转换 4.3.2 数据库逻辑结构 4.3.3数据库模型函数依赖…

Elasticsearch各种高级文档操作

本文来记录下Elasticsearch各种文档操作 文章目录 初始化文档数据查询所有文档匹配查询文档关键字精确查询文档多关键字精确查询文档字段匹配查询文档指定查询字段查询文档过滤字段查询文档概述指定想要显示的字段示例指定不想要显示的字段示例 组合查询文档范围查询文档概述使…

74.MySQL 分页原理与优化(下)

文章目录 前言一、一次分页查询的演进二、分页数据在不同页反复出现的坑 前言 上一篇文章介绍了分页原理与优化&#xff1a;73.MySQL 分页原理与优化&#xff08;上&#xff09; 但分页还有一个“坑”需要注意&#xff0c;本文细细道来&#xff0c;可能很多朋友都踩过这个坑还…

LOSS损失函数值是什么意思?

环境&#xff1a; Bert-VITS2-v2.3 问题描述&#xff1a; LOSS损失函数值是什么意思&#xff1f; 解决方案&#xff1a; 在机器学习和深度学习中&#xff0c;损失函数&#xff08;Loss Function&#xff09;用来衡量模型预测值与实际值之间的差异或误差。LOSS损失函数值是…

(Bean实例化的基本流程 )学习Spring的第六天

Bean实例化的基本流程 其实可以解释为三个过程: 1 . 有关Bean的信息被封装成一个map集合 : DeanDefinitionMap . key为Bean的名称 , value为有关<bena>标签的信息 2 . Spring框架对这个存储Bean信息的Map进行遍历 , 进行创建对象 , 把创建好的对象存储到另一个Map集合里…

08. Springboot集成webmagic实现网页爬虫

目录 1、前言 2、WebMagic 3、Springboot集成Webmagic 3.1、创建Springboot&#xff0c;并引入webmagic依赖 3.2、定义PageProcessor 3.3、元素选择 3.3.1、F12查看网页元素 3.3.2、元素选择 3.3.3、注意事项 4、小结 1、前言 在信息化的时代&#xff0c;网络爬虫已…

redis远程连接不上解决办法

问题描述&#xff1a; redis远程服务端运行在192.168.3.90计算机上&#xff0c;客户端计算机&#xff08;ip:192.168.3.110&#xff09;通过redsi-cli.exe客户端工具连接时&#xff0c;没有反应&#xff0c;连接不上。 如图所示&#xff1a; 解决步骤&#xff1a; 步骤一&…

二叉树进阶oj题目

二叉树进阶oj题目 两个结点的最近公共祖先前序中序&#xff08;中序后序&#xff09;还原二叉树 1、两个结点的最近公共祖先&#xff08;两种方法&#xff09; leetcode链接 题目描述&#xff1a;给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共…

web蓝桥杯真题--12、由文本溢出引发的“不友好体验”

背景介绍 通常情况下&#xff0c;为保证布局的稳定性&#xff0c;以及遵循在有限的空间展示更多内容的原则&#xff0c;页面的某块区域不会随内容的增多而无限增高或增宽&#xff0c;一般会有一个约束。 例如&#xff1a;整体元素过多可以使用滚动条&#xff1b;文字内容过多…

【Leetcode】接雨水(双指针、单调栈)

目录 &#x1f4a1;题目描述 &#x1f4a1;双指针解法 &#x1f4a1;单调栈解法 &#x1f4a1;题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 提示&#xff1a; n height.length1 < n…

CGLIB动态代理(AOP原理)(面试重点)

推荐先看JDK 动态代理&#xff08;Spring AOP 的原理&#xff09;&#xff08;面试重点&#xff09; JDK 动态代理与 CGLIB 动态代理的区别 JDK 动态代理有⼀个最致命的问题是其只能代理实现了接⼝的类. 有些场景下,我们的业务代码是直接实现的,并没有接⼝定义.为了解决这个问…

linux内核源码编译2.6失败

centos7环境 iso选择 https://mirrors.tuna.tsinghua.edu.cn/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso 自带qemu&#xff0c;未实测是否可用 选择编译版本2.6 下载地址 遇到的编译错误解决 yum list | grep curses yum install ncurses-devel.x86_64 -y yum i…

十六进制转十进制

题目 public class Main {public static void main(String[] args) {String str "2021ABCD";int k 0;long sum 0;for(int istr.length()-1;i>0;i--,k) {char c str.charAt(i);if(c>A&&c<D) {int res c-A10;sum(long)res*Math.pow(16,k);}else…

【C++干货铺】C++11新特性——右值引用、移动构造、完美转发

个人主页点击直达&#xff1a;小白不是程序媛 C系列专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 左值与左值引用 右值与右值引用 左值引用和右值引用的比较 左值引用总结&#xff1a; 右值引用总结&#xff1a; 左值引用的作用和意义 右值引用的使用场景和…

elasticsearch备份恢复,elasticdump使用

准备环境 1. 将node-v10.23.1-linux-x64.tar.xz上传到服务器/usr/local目录下 2. tar xf node-v10.23.1-linux-x64.tar.xz 3. 将node_modules.tar.gz上传到服务器/usr/local目录 4. tar -zxvf node_modules.tar.gz 5. 设置NODE环境 5.1 vim /etc/profile export NODEJS_…