首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

处理/proc/pid/fd/#链接的创建和删除的Linux内核代码在哪里?

处理/proc/pid/fd/#链接的创建和删除的Linux内核代码位于Linux内核的文件系统层。具体来说,它涉及到Linux内核的虚拟文件系统(Virtual File System,VFS)和进程管理子系统。

在Linux内核中,/proc是一个特殊的文件系统,它提供了一种访问内核数据结构的方式。/proc目录下的每个进程都有一个对应的子目录,以进程ID(PID)命名。在进程的子目录中,有一个名为fd的目录,它包含了进程打开的文件描述符的符号链接。每个符号链接的名称是一个数字,对应着进程打开的文件描述符的编号。

当进程打开一个文件时,Linux内核会为该文件描述符创建一个符号链接,指向实际的文件节点。这个符号链接会被创建在/proc/pid/fd目录下,并以文件描述符的编号作为链接的名称。当进程关闭文件描述符时,对应的符号链接会被删除。

具体的Linux内核代码实现可以在内核源代码的文件系统层和进程管理子系统中找到。由于Linux内核是开源的,可以通过查阅内核源代码来深入了解这部分的实现细节。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

“too many open files”原理和解决方案

分析问题: 为了准确定位到具体问题在哪里,我们就需要使用lsof命令,下面就lsof相关信息做一个基本介绍: 文件描述符:fd(file descriptor),Linux系统中一切皆可以看成是文件...linux命令lsof(list system open files):列出系统打开文件,终端下输入lsof即可显示系统打开文件。...我们还可以根据 ls /proc//fd 这个命令来确认一下最终结果: [root@linux]# ls /proc/17336/fd 0 10 12 14 16 18 2...ls /proc//fd | wc -l 统计pid对应进程打开fd数量。...cat /proc/sys/fs/file-max 表示当前内核可以打开最大文件句柄数,一般为内存大小(KB)10%,一般我们不需要主动设置这个值,除非这个值确实较小。

11.9K20

程序员必备Linux性能分析工具和方法

如果这些函数是设备特定,尝试着找出为什么需要使用这种特定设备(尤其是1.2中造成高中断设备),或许就可以判断出哪里出了问题。 用户空间占了大多是 CPU?...进程使‍用内存类型是什么? 通过 /proc//status 查看内存使用情况。如 VmExe 值很大,则说明可执行文件本身很大,需要确定哪些函数文本比较大。...通过 /proc//maps 查看进程使用了哪些共享库和以及这些库大小,对于太大共享库是否可能替换成大小更小版本。...哪个进程使用共享内存? 使用 ipcs -p 查看哪些进程创建和使用了共享内存。对于共享内存过大问题,可以查看其程序代码看分配是否合理。对于共享内存数不断增加,是否存在创建后未删除等问题。 ‍...哪个套接字处理流量? 确定了处理流量进程后,使用 strace/lsof 找到是哪个套接字产生了这些通信流量。

19510
  • 读书笔记--Android系统启动

    Android系统启动 2.1 init进程 上面提到,kernel层中通过swapper进程(也称Idle进程 pid=0)创建init进程,同时进程空间由内核态转到用户态,init入口函数init.cpp...文件描述符fd Linux中多次出现fd这个概念,文件描述符本质上是一个索引内核中资源地址一个下标描述,可能指Socket,UDP,TCP数据包,文件流等可读写操作数据。 3....而Linux中好像貌似没有线程这个概念,同时发生发生数据读写(也就是要操作fd)时,往往是用户空间和内核空间进程之间操作,上面也提到,内核进程权限更高,可以访问更高级别,那么用户空间发起I/O操作最后是交给内核处理...()返回可处理事件fd,属性服务最后处理fd就是在这里注册fd处理 具体参考: 相关知识点全面讲解: Linux IO模式及 select、poll、epoll详解 三个方法优缺点:...每个进程处理它进程发送信号时,都要注册处理者,处理者被称为信号处理器。

    60430

    恢复删除文件

    Linux计算机受到入侵时,常见情况是日志文件被删除,以掩盖攻击者踪迹。管理错误也可能导致意外删除重要文件,比如在清理旧日志时,意外地删除了数据库活动事务日志。...除了该进程之外,这个文件是不可见,因为已经删除了其相应目录索引节点。 /proc 目录下,其中包含了反映内核和进程树各种文件。...大多数与lsof 相关信息都存储于以进程PID 命名目录中,即/proc/1234 中包含PID 为1234 进程信息。...每个进程目录中存在着各种文件,它们可以使得应用程序简单地了解进程内存空间、文件描述符列表、指向磁盘上文件符号链接和其他系统信息。lsof 程序使用该信息和其他关于内核内部状态信息来产生其输出。...因此我们可以/proc/2699/fd/1 (fd每个以数字命名文件表示进程对应文件描述符)中查看相应信息,如下: [root@station90 fd]# pwd /proc/2699/fd

    2.5K30

    恢复删除文件

    Linux计算机受到入侵时,常见情况是日志文件被删除,以掩盖攻击者踪迹。管理错误也可能导致意外删除重要文件,比如在清理旧日志时,意外地删除了数据库活动事务日志。...除了该进程之外,这个文件是不可见,因为已经删除了其相应目录索引节点。 /proc 目录下,其中包含了反映内核和进程树各种文件。...大多数与lsof 相关信息都存储于以进程PID 命名目录中,即/proc/1234 中包含PID 为1234 进程信息。...每个进程目录中存在着各种文件,它们可以使得应用程序简单地了解进程内存空间、文件描述符列表、指向磁盘上文件符号链接和其他系统信息。lsof 程序使用该信息和其他关于内核内部状态信息来产生其输出。...因此我们可以/proc/2699/fd/1 (fd每个以数字命名文件表示进程对应文件描述符)中查看相应信息,如下: [root@station90 fd]# pwd /proc/2699/fd

    2.8K50

    两个主题:躲避execve与分析proc目录

    躲避execve小思路 之前文章中,我讲解过各种躲避execve监控方法,如果有朋友没看到过,可以点下面文章链接熟悉一下: 无"命令"反弹shell-逃逸基于execve命令监控(上) linux...分析/proc/目录 接下来文章中,我要讲解一下从linux进程内存中修改函数,需要给大家提前预习一下基础知识。 proc文件系统是一个伪文件系统,它提供内核数据结构接口。通常安装在/过程。.../exe -> /usr/bin/ping fd /proc/[pid]/fd是一个目录,包含进程打开文件情况。...root /proc/[pid]/root是进程根目录符号链接。.../28858/root -> / stack /proc/[pid]/stack显示当前进程内核调用栈信息,只有内核编译时打开了 CONFIG_STACKTRACE编译选项,才会生成这个文件。

    1.6K30

    Linux恢复误删文件操作

    Linux下,有时候我们可能会误删除一些文件,此时除了慌张,有什么可以补救措施? 删除文件恢复可以分为两种情况,一种是删除以后进程中仍存在删除信息,另一种是删除以后进程都找不到。...Linux环境下,任何事物都以文件形式存在,例如,普通文件、目录、网络文件系统文件、字符设备文件、(函数)共享库、管道,命名管道、符号链接、底层socket字流,网络socket,unix域名...除了该进程之外,这个文件是不可见,因为已经删除了其相应目录索引节点。 /proc目录下,包含了反映内核和进程树各种文件。...大多数和lsof相关信息都存储于以进程PID命名目录中,例如/proc/1234中包含PID为1234进程信息。...每个进程目录中存在着各种文件,他们可以使得应用程序简单地了解进程内存空间、文件描述符列表、指向磁盘上文件符号链接和其他系统信息。 lsof程序使用该信息和其他关于内核内部状态信息来产生其输出。

    3.3K40

    容器逃逸成真:从CTF解题到CVE-2019-5736漏洞挖掘分析

    /proc/[PID]/fd/:这个目录下包含了进程打开所有文件描述符。...runc-PID]/exe,拿到文件描述符fd; 4 持续尝试以写方式打开第3步中获得只读fd(/proc/self/fd/[fd]),一开始总是返回失败,直到runc结束占用后写方式打开成功,立即通过该...这样一来,Linux匿名机制代码实现确保其效果前提下,容器内恶意进程就无法通过前文所述/proc/[PID]/exe方式触及到宿主机上runc二进制程序。...其中很重要一点是,当进程去操作一个这样符号链接时,例如“打开”操作,Linux内核不会按照普通符号链接处理方式文件系统上做路径解析,而是会直接调用专属处理函数并返回对应文件文件描述符。...这样做好处有三:一方面,为magic links特殊处理提供了最有力证据;另一方面,能够锻炼从庞杂信息中寻找线索解决问题能力;最后,能够加深对Linux内核文件处理流程认识。

    3.3K20

    Linux恢复误删文件操作

    Linux下,有时候我们可能会误删除一些文件,此时除了慌张,有什么可以补救措施? 删除文件恢复可以分为两种情况,一种是删除以后进程中仍存在删除信息,另一种是删除以后进程都找不到。...Linux环境下,任何事物都以文件形式存在,例如,普通文件、目录、网络文件系统文件、字符设备文件、(函数)共享库、管道,命名管道、符号链接、底层socket字流,网络socket,unix域名...除了该进程之外,这个文件是不可见,因为已经删除了其相应目录索引节点。 /proc目录下,包含了反映内核和进程树各种文件。...大多数和lsof相关信息都存储于以进程PID命名目录中,例如/proc/1234中包含PID为1234进程信息。...每个进程目录中存在着各种文件,他们可以使得应用程序简单地了解进程内存空间、文件描述符列表、指向磁盘上文件符号链接和其他系统信息。 lsof程序使用该信息和其他关于内核内部状态信息来产生其输出。

    2.5K20

    使用 eBPF 实时持续跟踪进程文件记录

    /proc 目录下 fd hello 在运行状态时,通过查看 /proc/pid/fd 可以获取到文件当前打开文件句柄: $ ls -hl /proc/`pidof hello`/fd total...提供 lsof 工具实现原理也是遍历进程对应 /proc/pid/fd 文件实现。...这是因为 /proc/pid/fd 给我们展示是查看目录时文件打开最终快照。...使用 eBPF 实时跟踪文件记录 真正进入到 eBPF 环节之前,我们需要简单复习一些系统调用基础知识。 系统调用(syscall) Linux 系统实现中,分为了用户态和内核态。...用户态程序工作较低级别的状态,操作系统提供核心服务工作高级别的内核态,从而避免用户应用程序破坏系统正常运行,实现了用户级别的隔离。

    2K30

    Docker 技术鼻祖 Linux Namespace 入门系列:Namespace API

    前言 Linux Namespace 是 Linux 提供一种内核级别环境隔离方法。...从 3.8 版本内核开始,该目录下每个文件都是一个特殊符号链接链接指向 $namespace:[$namespace-inode-number],前半部份为 namespace 名称,后半部份数字表示这个...这些符号链接指向文件比较特殊,不能直接访问,事实上指向文件存放在被称为 nsfs 文件系统中,该文件系统用户不可见,可以使用系统调用 stat()[7] 返回结构体 st_ino 字段中获取...fd 表示要加入 namespace 文件描述符,可以通过打开其中一个符号链接来获取,也可以通过打开 bind mount 到其中一个链接文件来获取。...uts:[4026532338] $ readlink /proc/$$/ns/uts # $$ 表示当前 shell PID uts:[4026532338] 早期内核版本中,不能使用

    2.3K30

    Linux之lsof命令

    恢复删除文件 当Linux计算机受到入侵时,常见情况是日志文件被删除,以掩盖攻击者踪迹。管理错误也可能导致意外删除重要文件,比如在清理旧日志时,意外地删除了数据库活动事务日志。...除了该进程之外,这个文件是不可见,因为已经删除了其相应目录索引节点。 /proc 目录下,其中包含了反映内核和进程树各种文件。...大多数与 lsof 相关信息都存储于以进程 PID 命名目录中,即 /proc/1234 中包含PID 为 1234 进程信息。...每个进程目录中存在着各种文件,它们可以使得应用程序简单地了解进程内存空间、文件描述符列表、指向磁盘上文件符号链接和其他系统信息。lsof 程序使用该信息和其他关于内核内部状态信息来产生其输出。...因此我们可以 /proc/1283/fd/2 (fd每个以数字命名文件表示进程对应文件描述符)中查看相应信息,如下: # head -n 10 /proc/1283/fd/2 Aug 4

    1.3K30

    linux深入proc文件系统之pid目录(下)

    proc 是一个虚拟文件系统,Linux 系统中它被挂载于/proc 目录之上。...proc 有多个功能 ,这其中包括用户可以通过它访问内核信息或用于排错,这其中一个非常有 用功能,也是Linux 变得更加特别的功能就是以文本流形式来访问进程信息。.../proc/[pid]/root是进程根目录符号链接 > ls -al /proc/1751/root lrwxrwxrwx 1 root root 0 Jul 14 22:38 /proc/1751.../root -> / stack /proc/[pid]/stack显示当前进程内核调用栈信息,只有内核编译时打开了CONFIG_STACKTRACE编译选项,才会生成这个文件 > cat /proc.../proc/[pid]/ns/,目录,保存了每个名字空间入口,详见(man namespaces)。 相关文章 linux深入proc文件系统(上)

    3.7K11

    Linux内核基础学习笔记.md

    内核抢占可以减少这样等待时间,因而保证“更平滑”程序执行。但该特性代价是 增加内核复杂度,因为接下来有许多数据结构需要针对并发访问进行保护,即使处理器系统上 也是如此。...内核对外一个接口,当需要向内核提供兼容功能模块时,势必需要提供内核信息所以安装驱动时候它是必须; 2) Kernel-devel : 包含Linux内核完整代码还有内核配置文件,以及其他开发用资料...答:所谓动态库、静态库,指的是程序编译链接阶段,链接成可执行文件方式 1) 静态库指的是链接阶段将汇编生成目标文件.o 与引用到库一起链接打包到可执行文件中,因此对应链接方式称为静态链接(static...2) 而动态库程序编译时并不会被连接到目标代码中,而是程序运行是才被载入,因此对应链接方式称为动态链接(dynamic linking)。...for redis_pid in (pgrep -f “redis-server”)do echo -17 > /proc/ 运维提示: 有关OOM killer详细细节,可以参考Linux源码mm

    1.7K20

    11 个步骤完美排查服务器是否被入侵

    命令查看异常进程对应PID b.虚拟文件系统目录查找该进程可执行文件 11.如果确认机器已被入侵,重要文件已被删除,可以尝试找回被删除文件Note: 1、当进程打开了某个文件时,只要该进程保持打开该文件...2、/proc 目录下,其中包含了反映内核和进程树各种文件。...大多数与 lsof 相关信息都存储于以进程 PID 命名目录中,即 /proc/1234 中包含PID 为 1234 进程信息。...每个进程目录中存在着各种文件,它们可以使得应用程序简单地了解进程内存空间、文件描述符列表、指向磁盘上文件符号链接和其他系统信息。lsof 程序使用该信息和其他关于内核内部状态信息来产生其输出。...因此我们可以/proc/1264/fd/4(fd每个以数字命名文件表示进程对应文件描述符)中查看相应信息,如下: d.从上面的信息可以看出,查看/proc/1264/fd/4就可以得到所要恢复数据

    3K31

    为什么ib_logfile被覆盖Mysql还能正常运行!?

    删除后docker1还可以正常使用 rm ib_logfile0 rm ib_logfile1 问题排查 1 为什么文件被删除了还能正常运行 linux中,每个文件都有两个 link 计数器: i_count...那么被进程调用文件,遭遇 rm 操作,那么它将何去何从呢? 首先,该文件 i_nlink被删除,剩下 i_count,故仅删除磁盘硬链接,内容未删除。可以通过 proc 文件系统查找文件。...每个进程都有进程id,可以通过 proc文件系统查找到该进程打开及调用文件链接。...文件已经被删了,上面看到df是4和9,检查进程使用fd链到哪了 [root@ecs /proc/23141/fd]# stat /proc/23141/fd/4 File: ‘/proc/23141...(stat看不到,删除只能用lsof看) 所以数据实际是写入被删除文件中 3 如何恢复 停写后用文件句柄把数据捞回来,例如上图ibdata cat /proc/23141/fd/10 > /u01

    47830

    linux lsof命令查看文件占用进程

    那么通过lsof可以找出那些进程使用当前要卸载文件系统,如下: # lsof /GTES11/ COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME...除了该进程之外,这个文件是不可见,因为已经删除了其相应目录索引节点。 /proc 目录下,其中包含了反映内核和进程树各种文件。...大多数与 lsof 相关信息都存储于以进程 PID 命名目录中,即 /proc/1234 中包含PID 为 1234 进程信息。...每个进程目录中存在着各种文件,它们可以使得应用程序简单地了解进程内存空间、文件描述符列表、指向磁盘上文件符号链接和其他系统信息。lsof 程序使用该信息和其他关于内核内部状态信息来产生其输出。...因此我们可以 /proc/1283/fd/2 (fd每个以数字命名文件表示进程对应文件描述符)中查看相应信息,如下: # head -n 10 /proc/1283/fd/2 Aug 4

    14K40

    Linux内核如何私闯进程地址空间并修改进程内存

    我们知道,原始野人社会,是没有家庭观念,所有的资源都是部落内共享,所有的野人都可以以任意方式在任意时间和任何其他野人交互。类似Dos这样操作系统就是这样,内存地址空间并没有隔离。...操作系统中,家庭类似于虚拟地址空间,而房子就是页表。 邻居不能闯入你房子,但特权管理机构只要理由充分,就可以进入普通人家房子,touch这家人东西。.../mm.h> #include #include static int pid = 1; module_param(pid, int,...(find_pid_ns(pid, &init_pid_ns), PIDTYPE_PID); // 找到这家人住在哪里 if(!...有啊,别忘了一切皆文件,恰好在proc文件系统中,就有这么一个文件: /proc/$pid/pagemap 读取这个文件,得到就是进程虚拟地址页表项,下图截自内核Doc:Documentation/

    3.1K20

    Zygote中Socket通信能否替换成Binder通信?

    观点1:并发问题 链接: https://blog.csdn.net/qq_39037047/article/details/88066589 观点描述: 怕父进程binder线程有锁,然后子进程主线程一直等其子线程...观点2:父子进程共享FD问题(其实这个是我以前早期观点) 观点描述: 因为Zygoteopen("dev/binder")中带有的flag是O_CLOEXEC,fork之后,子进程执行EXEC时候...,会因为O_CLOEXEC条件关闭这个共享FD,就会调用binder_release代码,顺带清空父进程FD对应file结构体中private_data对象保存binder_proc,影响父进程...上述观点对O_CLOEXEC理解有些偏差,正确理解应该是linux系统中,父进程打开一个文件fd可以带上O_CLOEXEC标志位,fork之后,子进程得到父进程完整拷贝,对于父进程已经open...内核里,子进程只是把fd对应file指针指向父进程fd对应struct file,并且把file引用加1。

    1.9K20
    领券