当前位置: 首页 > news >正文

149、【OS】【Nuttx】【周边】效果呈现方案解析:VSCode 打开外部链接(二)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

上篇 blog
【OS】【Nuttx】【周边】效果呈现方案解析:VSCode 打开外部链接(一)
分析了 strace 日志中最后 browser.sh 和 code 命令的关系(之间并无联系,主要是通过 Node.js 执行脚本 server-cli.js,code 作为参数传入),但 browser.sh 脚本和 code 命令很像,差别只有一个 --openExternal 选项

VSCode 打开外部链接

上篇 blog 提到了 readlink -fdirname 命令,其中 readlink -f 命令会输出 browser.sh 脚本的绝对路径

另外,从 browser.sh 路径来看,dirname 命令会剪掉后面三个元素,那么得到的是 ../server 段的绝对路径
在这里插入图片描述
可以看到,VSCode 自带的 Node.js 正在这个 server 路径下
在这里插入图片描述
回到 strace 日志这里
在这里插入图片描述
可以看到,260 行其实并不是执行 code 命令,而是 browser.sh 脚本的展开,相当于通过 node 解释器执行 server-cli.js 脚本

接着来看下最后一个关键的日志
在这里插入图片描述
284 行的这条 connect 日志

2715227 connect(18, {sa_family=AF_UNIX, sun_path="/run/user/1000/vscode-ipc-d5a87263-00c8-44d4-84fc-93a13038ef44.sock"}, 110) = 0
  • 首先,这里的 connect(...) 是一个系统调用,用于客户端连接一个 socket
  • 第一个参数 18 是个文件描述符,是进程内部通过 socket() 创建的 socket 句柄,指向后面的 socket 路径
  • AF_UNIX 表示这是一个本地进程间通信(Unix Domain Socket),不走网络,从 Nuttx 自带的 socket.h 头文件也能看出来
    在这里插入图片描述
    这里的 AF_ 前缀表示 Address Families,可以看到其指向 PF_UNIX 宏, PF_UNIX 宏定义如下
    在这里插入图片描述
    PF_ 前缀表示 Protocol Families,可以看到这里 PF_UNIXPF_LOCAL 宏都是一个意思,本地通信
  • sun_path=.../vscode-ipc-*.sock 是 socket 路径,位于内存文件系统中,用于进程间通信,前面的 18 是这个 socket 路径的句柄,也可以理解为 ID,可以类比 C 语言里面指针和所指向内存的关系
  • = 0 表示 socket 连接成功

所以整体而言,当前 PID 为 2715227 的进程尝试连接一个本地的 Unix Socket,并成功连接

注意,Socket(套接字)是计算机网络编程中的一个核心概念,是一种通信的端点,可以理解为网络通信的插座或接口,但是这里涉及的不是网络套接字 Socket,而是UNIX 域套接字(Unix Domain Socket),也叫本地套接字(Local Socket),用于同一台机器上不同进程之间的高效通信

这里 VSCode 用的就是这种进程间通信机制(Inter-Process Communication),VSCode 由多个进程组成,比如主进程,渲染进程,扩展宿主等,这些进程通过这种本地 Socket 文件进行高效安全的通信,这点通过其 socket 文件命名 vscode-ipc-*.sock 就能看出来

大致流程如下:
在这里插入图片描述
VSCode-Server 的主进程(Main Server Process)在监听 /run/user/1000/vscode-ipc-*.sock,主服务进程由 VSCode Remote SSH 扩展首次连接时启动,而 Node.js 解释器运行的 code --openExternal 命令,本质是个客户端,需要向服务端主进程报告:有程序(这里是 browser.sh)要打开一个外部 URL

VSCode 主进程收到消息后,解析命令,将外部请求,通过 SSH 隧道,发回给本地 VSCode 客户端

ok,先分析到这儿,下篇 blog 继续

http://www.dtcms.com/a/473886.html

相关文章:

  • Apache Commons IO:文件流处理利器,让Java IO操作更简单
  • 哪个网站做简历免费自己做免费网站
  • 医院预约挂号|基于Java+vue的医院预约挂号系统小程序的设计与实现(源码+数据库+文档)
  • 翻转二叉树---超全详细解
  • AI智能体全球应用调查报告:从“对话”到“做事”的变革
  • Linux网络之----网络编程
  • [Power BI] CALCULATETABLE函数
  • 3494. 酿造药水需要的最少总时间
  • 沐风老师3DMAX科研绘图插件DNA生成器使用方法详解
  • 宁波做网站gs什么是网络营销的职能
  • AI编程工具(Cursor/Copilot/灵码/文心一言/Claude Code/Trae)AI编程辅助工具全方位比较
  • FastGPT入门实战
  • 数据结构笔试核心考点
  • 用python做购物网站万网搜官网
  • 创建qq网站如何做网站流量分析报表
  • Docker实战:从基础镜像到Nginx定制
  • 什么是NoSQL?
  • 北京网站建设公司代理备份整个网站
  • 宁夏做网站建设公司私人订制与定制
  • 在 Ubuntu 下开发鸿蒙应用:理解系统的最佳入口
  • RabbitMQ四种交换机详解
  • 几种最常见的病毒/恶意软件类型
  • PHP计算过去一定时间段内日期范围函数
  • 怎么看网站是什么程序做的产品推广的目的和意义
  • 摄像头软件参数调试详解与实战
  • DB-GPT:AI原生数据应用开发框架解析
  • 论文笔记(九十三)ManipulationNet: Benchmarking
  • AIX 服务器 CPU 长期 90%:从 nmon 画像到 DataStage 僵尸进程的定位与清理
  • 10_基础策略编程实现
  • 服装网站建设前景分析网站 不备案