Linux /proc第一篇---->/proc/pid记录了什么

本文详细介绍了Linux系统中/proc/pid目录下的常见目录和文件,如cmdline、cwd、environ、exe、fd、fdinfo、limits、oom_adj、oom_score、stat和status等,并提供了实用的解释和使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.linuxidc.com/Linux/2012-09/70975.htm

由于自己Linux系统知识基础比较薄弱,准备比较全面学习,准备从/proc这个目录开始。实际上这个目录也基本上记录所有系统运行时和内核的一些信息,所以如果想对linux系统有一个比较全面的了解,从/proc入手应该是个不错的选择。准备将自己学习的过程记录下来,分享给同样需要的朋友,也便于以后查阅。今天准备介绍一下/proc/pid这个目录到底是做什么用的,它到底记录了哪些信息。

cd /proc/之后,你会发现很多的目录和文件,今天首先来介绍的就是那些以数字命名的目录--它们就是linux中的进程号,每当你创建一个进程时,里面就会动态更新多出一个名称为pid的目录,然后你ls -l /proc/pid会发现如下信息:

dr-xr-xr-x  2 user group 0 Sep 19 16:17 attr

-r--------  1 user group 0 Sep 19 16:17 auxv
-r--r--r--  1 user group 0 Sep 19 16:17 cgroup
--w-------  1 user group 0 Sep 19 16:17 clear_refs
-r--r--r--  1 user group 0 Sep 18 14:18 cmdline
-rw-r--r--  1 user group 0 Sep 19 16:17 coredump_filter
-r--r--r--  1 user group 0 Sep 19 16:17 cpuset
lrwxrwxrwx  1 user group 0 Sep 19 16:17 cwd -> /home/user/zbs/mysql/node-2
-r--------  1 user group 0 Sep 19 16:17 environ
lrwxrwxrwx  1 user group 0 Sep 19 16:17 exe -> /home/user/zbs/xtradb-5.1.47_group/libexec/mysqld
dr-x------  2 user group 0 Sep 18 14:38 fd
dr-x------  2 user group 0 Sep 19 16:17 fdinfo
-r--------  1 user group 0 Sep 19 16:17 io
-r--------  1 user group 0 Sep 19 16:17 limits
-rw-r--r--  1 user group 0 Sep 19 16:17 loginuid
-r--r--r--  1 user group 0 Sep 19 16:17 maps
-rw-------  1 user group 0 Sep 19 16:17 mem
-r--r--r--  1 user group 0 Sep 19 16:17 mountinfo
-r--r--r--  1 user group 0 Sep 19 16:17 mounts
-r--------  1 user group 0 Sep 19 16:17 mountstats
dr-xr-xr-x 10 user group 0 Sep 19 16:17 net
-r--r--r--  1 user group 0 Sep 19 16:17 numa_maps
-rw-r--r--  1 user group 0 Sep 19 16:17 oom_adj
-r--r--r--  1 user group 0 Sep 19 16:17 oom_score
-r--r--r--  1 user group 0 Sep 19 16:17 pagemap
-r--r--r--  1 user group 0 Sep 19 16:17 personality
lrwxrwxrwx  1 user group 0 Sep 19 16:17 root -> /
-rw-r--r--  1 user group 0 Sep 19 16:17 sched
-r--r--r--  1 user group 0 Sep 19 16:17 sessionid
-r--r--r--  1 user group 0 Sep 19 16:17 smaps
-r--r--r--  1 user group 0 Sep 19 16:17 stack
-r--r--r--  1 user group 0 Sep 18 14:18 stat
-r--r--r--  1 user group 0 Sep 18 14:18 statm
-r--r--r--  1 user group 0 Sep 18 14:18 status
-r--r--r--  1 user group 0 Sep 19 16:17 syscall

dr-xr-xr-x 20 user group 0 Sep 19 16:17 task

下面我们挑常用的来解释(用红色标注出)

cmdline:这个主要是当前这个进程被运行时的command line,里面包括了运行时指定的一些参数,比如如果是mysqld的话就包括basedir==,datadir==,port=,socket=等等信息,你可以自己尝试一下。

cwd:current working directory,当前的工作目录

environ:这是个比较有用的文件,里面记录了当前进程的一些环境变量,比如一台机器上对同一个系统起多个实例(当然是不同端口、不同数据目录),而你想知道哪个进程对应的是在哪个数据目录起来的(可能是因为你想kill-9其中一个实例,因为你怕弄错,所以的确定哪个进程是对应哪个数据目录),那么此时你该怎么办呢?两者方法:1.strings /proc/pid/environ | grep PWD 2.tr \\0 \\n < /proc/pid/envrion | grep PWD 即可。当然里面还有很多的信息,你可以自己尝试。

exe:这个就是气这个进程的执行文件

fd:进程打开的文件描述符,我记得以前有人使用mysql遇到过two many openfiles的错误,这个就是打开太多的文件导致的,当然你如果只修改mysql里面的参数可能不会起作用,因为可能os上设置了一个比较小的数,所以要两者都调大。

fdinfo:跟上面一个一样,只不过只有文件描述符的值,没有表示这个文件描述符是对应打开的哪个文件。在/proc很多时候都是这样维护的:可能两个文件里面要表示的信息是一样的,但是有一个一般是以人能容易读懂的格式给出。

limits:这个跟fd有一点关联,因为这个里面限制了进程对系统资源的使用额度,比如前面说的你可以打开多少文件,具体的设定你可以修改这个文件/etc/securiry/limits.conf,里面也对每一项说得很清楚,只要会点E文,理解应该没问题

oom_adj/oom_score:这两个与linux的OOM机制有关的文件(关于OOM请看这里),oom_adj相当于一个因子,它值越大,在OOM时更容易被系统kill掉,但最终决定是否被kill的是oom_score,其实计算这个oom_score时,就是根据oom_adj来的,oom_adj更大,计算出来的oom_score就更大,也能容易在OOM时被系统kill掉。当然如果是很重要的服务现场,为了避免出现这种情况设置oom_adj=0就行,表示永远不会因为OOM被kill。

stat/status:这两者要表示的信息都是一样的,进程的基本状态,但是后一个是以人容易读懂的格式给出,怎么分析前者stat的内容-->见这里

这里顺便提一个问题?我们遇到过通过查看stat里面的CPU time spent in user code(第14个值)这个值是0,不知道是什么原因导致的,有谁知道请留个言告诉一下

当然你会发现我还有很多的项没介绍?最主要的原因是有些我也不懂,其次,对于新手了解这些最常用的应该暂时足够了,等以后自己对它了解了再慢慢更新上来。当然如果你了解那些我没提到的目录、文件,欢迎大家留言互相交流~

参考文章:

1. http://www.kernel.org/doc/man-pages/online/pages/man5/proc.5.html


<think>我们正在讨论的是Linux系统中的`/usr/lib/systemd/systemd --switch root`服务。根据引用[2]和引用[4]中的信息,我们可以看到在进程树和进程列表中,systemd进程的启动参数中包含`--system--deserialize`或`--switched-root --system --deserialize`。特别地,引用[4]中显示: ```root10.00.3460806628? Ss07:090:02 /usr/lib/systemd/systemd--switched-root--system--deserialize22``` 这里的`--switched-root`是一个关键参数。###问题分析用户询问的是`/usr/lib/systemd/systemd--switchroot`服务的作用。注意,用户可能将`--switched-root`误写成了`--switch root`。实际上,在systemd的启动参数中,我们常见的是`--switched-root`。###功能解析1. **systemd的作用**:systemd是Linux系统的初始化系统(init系统),它是系统启动后运行的第一个进程(PID=1),负责启动和管理其他所有进程[^2][^4]。2.**--switched-root参数**:该参数用于指示systemd在系统启动过程中已经切换了根文件系统(root filesystem)。在Linux系统启动的早期阶段(如initramfs阶段),会挂载一个临时的根文件系统,然后通过`pivot_root`或`switch_root`操作切换到真正的根文件系统。此时,systemd会以`--switched-root`参数重新执行,表示它已经运行在新的根文件系统下[^2][^4]。 3. **--deserialize参数**:该参数用于从之前保存的状态中恢复运行状态。在关机或重启时,systemd可能会将一些状态序列化(保存)到文件中,在下次启动时通过`--deserialize`参数读取这些状态以恢复某些服务的状态(但通常不用于普通服务,而是用于系统整体状态恢复)[^2][^4]。###具体流程-在系统启动过程中,初始的initramfs环境会挂载真正的根文件系统,并执行`switch_root`操作。-然后,initramfs会执行真正的根文件系统中的`/sbin/init`(通常是指向systemd的符号链接),并传递参数`--switched-root --deserialize<状态文件>`。 -这样,systemd就会知道它已经在一个切换后的根文件系统上运行,并且尝试从指定的状态文件中恢复之前保存的状态。###总结`/usr/lib/systemd/systemd--switched-root--system--deserialize22`的作用是: -作为系统的初始化进程(PID=1)启动。 -`--switched-root`表明已经切换到了真正的根文件系统。 -`--deserialize22`表示从文件描述符22(通常是一个文件)中反序列化之前保存的状态(如果有的话)[^2][^4]。 ###注意事项-这个进程是系统启动的关键,用户通常不需要手动干预。-如果该进程出现问题,可能会导致系统无法正常启动。### §§相关问题§§1.systemd作为init系统的主要职责是什么? 2. Linux系统启动过程中initramfs的作用是什么? 3.如何理解systemd中的单元(unit)和服务(service)?</think>### `/usr/lib/systemd/systemd --switched-root` 服务作用解析 #### 1. **核心功能:系统初始化进程** - **PID 1 进程**:这是Linux系统的**首个用户空间进程**(PID=1),由内核直接启动,负责初始化整个操作系统环境[^2][^4]。 - **系统管理器**:作为systemd的核心组件,它协调所有后续进程的启动,管理服务依赖关系和系统状态[^1][^5]。 #### 2. `--switched-root` 参数的特殊意义 该参数标志系统已完成**根文件系统切换**,这是启动过程中的关键阶段: 1. **initramfs阶段**:内核先加载临时根文件系统(initramfs),执行硬件检测和驱动加载。 2. **根切换操作**:通过`switch_root`命令将根目录从initramfs切换到真实的磁盘分区(如`/dev/sda1`)。 3. **参数生效**:切换后重新执行systemd并添加`--switched-root`参数,表明: ```bash /usr/lib/systemd/systemd --switched-root --system --deserialize 22 # 引用[4]示例 ``` - `--system`:声明以系统模式运行 - `--deserialize`:从文件描述符恢复系统状态(22是状态文件描述符) #### 3. 核心职责分解 | 阶段 | 功能 | |--------------|----------------------------------------------------------------------| | **启动前期** | 加载`/etc/fstab`挂载文件系统,激活基础设备(udev) | | **服务管理** | 解析`/usr/lib/systemd/system/`目录的单元文件,按依赖顺序启动服务[^1] | | **状态维护** | 通过cgroups跟踪进程树,实现服务隔离和资源控制(见引用[3]进程树) | | **系统切换** | 处理根文件系统切换后的环境适配(如重挂载/sys, /proc) | #### 4. 技术特性 - **状态序列化**:`--deserialize`参数允许从保存的状态恢复运行,实现快速启动或状态迁移[^4]。 - **进程树根节点**:所有用户空间进程都是其子进程(引用[3]中`systemd─┬─NetworkManager─┬─...`)。 - **不可手动调用**:该进程由内核自动启动,用户执行`systemctl`命令实际与其通信而非直接替换[^1]。 #### 5. 故障诊断 若此进程异常会导致**系统启动失败**,需检查: - 日志定位:`journalctl -b`查看本次启动日志 - 状态文件:`/run/systemd/serialized-state/*` - 常见错误:根文件系统挂载失败、initramfs损坏或单元文件冲突 > **总结**:`/usr/lib/systemd/systemd --switched-root`是系统完成根切换后的主初始化进程,承担服务管理、资源分配和状态恢复等核心功能,作为PID 1进程维系整个用户空间的运行[^2][^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值