【Linux】通过 PID 获取服务信息 带你玩转 linux

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 【Linux】通过 PID 获取服务信息 带你玩转 linux

简述

新接手一台服务器,如何获取服务信息?接下来带你通过 PID 简单获取命令行参数、环境变量、打开的文件、内存映射、进程状态等等。

实操

以下以 MySQL 为例:

获取 PID

可通过 netstat -lntp|grep mysqldps -ef|grep mysqld 获取

# 方法 1
[root@test04 ~]# netstat -lntp|grep [m]ysqld
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::3306                 :::*                    LISTEN      21809/mysqld    # 获取到 PID 21809
# 方法 2
[root@test04 ~]# ps -ef|grep  [m]ysqld
UID       PID  PPID   C STIME TTY       TIME     CMD
mysql    21809     1  0 10:16 ?        00:00:02 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid  # 获取到 PID 21809

进程信息简介

通过进程号 21809 查看进程信息

[root@test04 ~]# cd /proc/21809
[root@test04 21809]# ll
total 0
dr-xr-xr-x.  2 mysql mysql 0 Apr  9 10:17 attr       # 进程的 SELinux 属性目录,用于存储安全上下文信息。
-rw-r--r--.  1 mysql mysql 0 Apr  9 10:56 autogroup  # 用于自动进程组调度的文件。
-r--------.  1 mysql mysql 0 Apr  9 10:56 auxv       # 包含进程的辅助向量信息的文件。
-r--r--r--.  1 mysql mysql 0 Apr  9 10:16 cgroup     # 包含进程所在 cgroup 的信息。
--w-------.  1 mysql mysql 0 Apr  9 10:56 clear_refs # 用于清除进程内存页的文件。
-r--r--r--.  1 mysql mysql 0 Apr  9 10:17 cmdline    # 包含进程的命令行参数。
-rw-r--r--.  1 mysql mysql 0 Apr  9 10:17 comm       # 包含进程的命令名。
-rw-r--r--.  1 mysql mysql 0 Apr  9 10:56 coredump_filter  # 用于控制进程核心转储的文件。
-r--r--r--.  1 mysql mysql 0 Apr  9 10:56 cpuset     # 包含进程的 cpuset 信息。
lrwxrwxrwx.  1 mysql mysql 0 Apr  9 10:56 cwd -> /var/lib/mysql  # 一个符号链接,指向进程的当前工作目录。
-r--------.  1 mysql mysql 0 Apr  9 10:56 environ    # 包含进程环境变量的文件。
lrwxrwxrwx.  1 mysql mysql 0 Apr  9 10:36 exe -> /usr/sbin/mysqld  # 一个符号链接,指向进程正在执行的可执行文件。
dr-x------.  2 mysql mysql 0 Apr  9 10:17 fd         # 包含进程打开的文件描述符的目录。
dr-x------.  2 mysql mysql 0 Apr  9 10:56 fdinfo     # 包含有关进程文件描述符的信息的目录。
-rw-r--r--.  1 mysql mysql 0 Apr  9 10:56 gid_map    # 包含进程的有效组 ID 到文件系统 ID 的映射信息。
-r--------.  1 mysql mysql 0 Apr  9 10:56 io         # 包含进程 I/O 统计信息的文件。
-r--r--r--.  1 mysql mysql 0 Apr  9 10:56 limits     # 包含进程资源限制的文件。
-rw-r--r--.  1 mysql mysql 0 Apr  9 10:56 loginuid   # 包含进程的登录用户 ID 的文件。
dr-x------.  2 mysql mysql 0 Apr  9 10:56 map_files  # 包含进程映射的文件的目录。
-r--r--r--.  1 mysql mysql 0 Apr  9 10:56 maps       # 包含进程地址空间映射信息的文件。
-rw-------.  1 mysql mysql 0 Apr  9 10:56 mem        # 包含进程内存映射的文件。
-r--r--r--.  1 mysql mysql 0 Apr  9 10:56 mountinfo  # 包含进程的挂载信息的文件。
-r--r--r--.  1 mysql mysql 0 Apr  9 10:56 mounts     # 包含进程的挂载点信息的文件。
-r--------.  1 mysql mysql 0 Apr  9 10:56 mountstats # 包含进程的挂载统计信息的文件。
dr-xr-xr-x.  5 mysql mysql 0 Apr  9 10:56 net        # 包含进程网络信息的目录。
dr-x--x--x.  2 mysql mysql 0 Apr  9 10:56 ns         # 包含进程命名空间信息的目录。
-r--r--r--.  1 mysql mysql 0 Apr  9 10:56 numa_maps  # 包含进程 NUMA 节点内存映射信息的文件。
-rw-r--r--.  1 mysql mysql 0 Apr  9 10:56 oom_adj    # 控制进程被杀死的 OOM 分数的文件。
-r--r--r--.  1 mysql mysql 0 Apr  9 10:56 oom_score  # 用于表示进程 OOM 分数的文件。
-rw-r--r--.  1 mysql mysql 0 Apr  9 10:56 oom_score_adj  # 控制进程被杀死的 OOM 分数的文件。
-r--r--r--.  1 mysql mysql 0 Apr  9 10:56 pagemap    # 包含进程页面映射信息的文件。
-r--------.  1 mysql mysql 0 Apr  9 10:56 patch_state  # 包含进程的内核补丁状态的文件。
-r--r--r--.  1 mysql mysql 0 Apr  9 10:56 personality  # 包含进程的人格信息的文件。
-rw-r--r--.  1 mysql mysql 0 Apr 9 10:56 projid_map  # 包含进程的有效项目 ID 到文件系统 ID 的映射信息的文件。
lrwxrwxrwx.  1 mysql mysql 0 Apr 9 10:56 root -> /   # 一个符号链接,指向根目录。
-rw-r--r--.  1 mysql mysql 0 Apr 9 10:56 sched       # 包含进程调度策略的文件。
-r--r--r--.  1 mysql mysql 0 Apr 9 10:56 schedstat   # 包含进程调度统计信息的文件。
-r--r--r--.  1 mysql mysql 0 Apr 9 10:56 sessionid   # 包含进程会话 ID 的文件。
-rw-r--r--.  1 mysql mysql 0 Apr 9 10:56 setgroups   # 控制进程是否可以设置附加组的文件。
-r--r--r--.  1 mysql mysql 0 Apr 9 10:56 smaps       # 包含进程内存使用统计信息的文件。
-r--r--r--.  1 mysql mysql 0 Apr 9 10:56 stack       # 包含进程栈信息的文件。
-r--r--r--.  1 mysql mysql 0 Apr 9 10:16 stat        # 包含进程状态信息的文件。
-r--r--r--.  1 mysql mysql 0 Apr 9 10:56 statm       # 包含进程内存状态信息的文件。
-r--r--r--.  1 mysql mysql 0 Apr 9 10:56 status      # 包含进程当前状态的文件。
-r--r--r--.  1 mysql mysql 0 Apr 9 10:56 syscall     # 包含进程系统调用信息的文件。
dr-xr-xr-x.  30 mysql mysql 0 Apr 9 10:56 task       # 包含进程线程信息的目录。
-r--r--r--.  1 mysql mysql 0 Apr 9 10:56 timers      # 包含进程定时器信息的文件。
-rw-r--r--.  1 mysql mysql 0 Apr 9 10:56 uid_map     # 包含进程的有效用户 ID 到文件系统 ID 的映射信息的文件。
-r--r--r--.  1 mysql mysql 0 Apr 9 10:56 wchan       # 包含进程等待中的内核函数地址的文件。

进程状态简述

通过进程号 21809 查看进程状态,关键信息备注

[root@test04 21809]# cat /proc/21809/status
Name:   mysqld # 进程的名称
Umask:  0026
State:  S (sleeping)  # 进程的状态,这里是S,表示睡眠状态(sleeping)
Tgid:   21809
Ngid:   0
Pid:    21809  # 进程的PID
PPid:   1  # 父进程的PID,这里是1,表示父进程是init进程,通常是操作系统启动时的第一个用户进程。
TracerPid:      0
Uid:    27      27      27      27  # 进程的用户ID
Gid:    27      27      27      27  # 进程的用户组ID
FDSize: 64
Groups: 27 
VmPeak:  1189208 kB   # 进程的虚拟内存峰值
VmSize:  1189208 kB   # 虚拟内存大小
VmLck:         0 kB
VmPin:         0 kB
VmHWM:    178504 kB
VmRSS:    178504 kB   # 实际驻留内存大小
RssAnon:          170184 kB
RssFile:            8320 kB
RssShmem:              0 kB
VmData:  1129496 kB
VmStk:       132 kB
VmExe:     26384 kB
VmLib:      4268 kB
VmPTE:       612 kB
VmSwap:        0 kB
Threads:        28  # 进程中的线程数
SigQ:   0/7256
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000084007
SigIgn: 0000000000003000
SigCgt: 00000001800006e8
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000001fffffffff
CapAmb: 0000000000000000
NoNewPrivs:     0
Seccomp:        0
Speculation_Store_Bypass:       vulnerable
Cpus_allowed:   f
Cpus_allowed_list:      0-3
Mems_allowed:   00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:      0
voluntary_ctxt_switches:        218  # 自愿上下文切换的次数  较多的自愿上下文切换可能表示进程的活动模式更加交互式或者进程主动释放CPU资源,这通常是正常的
nonvoluntary_ctxt_switches:     3    # 非自愿上下文切换的次数  较多的非自愿上下文切换可能表示系统资源紧张,或者有其他优先级较高的任务需要执行

巧用文件描述符

/proc/[PID]/fd 目录包含了进程打开的文件描述符的符号链接列表。每个符号链接的名称是文件描述符的编号,指向相应的打开文件、设备或套接字。

一般可以查看到打开的日志文件等信息。

[root@test04 21809]# cd /proc/21809/fd
[root@test04 fd]# ll
total 0
lr-x------. 1 mysql mysql 64 Apr  9 10:17 0 -> /dev/null
l-wx------. 1 mysql mysql 64 Apr  9 10:17 1 -> /var/log/mysqld.log  # 日志
lrwx------. 1 mysql mysql 64 Apr  9 10:17 10 -> /var/lib/mysql/ibdata1
lrwx------. 1 mysql mysql 64 Apr  9 10:17 11 -> /var/lib/mysql/ibtmp1
lrwx------. 1 mysql mysql 64 Apr  9 10:17 12 -> /tmp/ibt9FFnA (deleted)
lrwx------. 1 mysql mysql 64 Apr  9 10:17 13 -> /var/lib/mysql/mysql/help_topic.ibd
lrwx------. 1 mysql mysql 64 Apr  9 10:17 14 -> /var/lib/mysql/mysql/help_relation.ibd
lrwx------. 1 mysql mysql 64 Apr  9 10:17 15 -> /var/lib/mysql/mysql/help_keyword.ibd
lrwx------. 1 mysql mysql 64 Apr  9 10:17 16 -> /var/lib/mysql/sys/sys_config.ibd
lrwx------. 1 mysql mysql 64 Apr  9 10:17 17 -> /var/lib/mysql/mysql/plugin.ibd
lrwx------. 1 mysql mysql 64 Apr  9 10:17 18 -> /var/lib/mysql/mysql/innodb_table_stats.ibd
lrwx------. 1 mysql mysql 64 Apr  9 10:17 19 -> /var/lib/mysql/mysql/innodb_index_stats.ibd
l-wx------. 1 mysql mysql 64 Apr  9 10:17 2 -> /var/log/mysqld.log
lrwx------. 1 mysql mysql 64 Apr  9 10:17 20 -> /var/lib/mysql/mysql/gtid_executed.ibd
lrwx------. 1 mysql mysql 64 Apr  9 10:17 21 -> socket:[938812]
lrwx------. 1 mysql mysql 64 Apr  9 10:17 22 -> socket:[938813]
lrwx------. 1 mysql mysql 64 Apr  9 10:17 23 -> /var/lib/mysql/mysql/server_cost.ibd
lrwx------. 1 mysql mysql 64 Apr  9 10:17 24 -> /var/lib/mysql/mysql/engine_cost.ibd
lrwx------. 1 mysql mysql 64 Apr  9 10:17 25 -> /var/lib/mysql/mysql/user.MYI
lrwx------. 1 mysql mysql 64 Apr  9 10:17 26 -> /var/lib/mysql/mysql/user.MYD
lrwx------. 1 mysql mysql 64 Apr  9 10:17 27 -> /var/lib/mysql/mysql/db.MYI
lrwx------. 1 mysql mysql 64 Apr  9 10:17 28 -> /var/lib/mysql/mysql/db.MYD
lrwx------. 1 mysql mysql 64 Apr  9 10:17 29 -> /var/lib/mysql/mysql/proxies_priv.MYI
lrwx------. 1 mysql mysql 64 Apr  9 10:17 3 -> /var/lib/mysql/ib_logfile0
lrwx------. 1 mysql mysql 64 Apr  9 10:17 30 -> /var/lib/mysql/mysql/proxies_priv.MYD
lrwx------. 1 mysql mysql 64 Apr  9 10:17 31 -> /var/lib/mysql/mysql/time_zone_leap_second.ibd
lrwx------. 1 mysql mysql 64 Apr  9 10:17 32 -> /var/lib/mysql/mysql/time_zone_name.ibd
lrwx------. 1 mysql mysql 64 Apr  9 10:17 33 -> /var/lib/mysql/mysql/time_zone.ibd
lrwx------. 1 mysql mysql 64 Apr  9 10:17 34 -> /var/lib/mysql/mysql/time_zone_transition_type.ibd
lrwx------. 1 mysql mysql 64 Apr  9 10:17 35 -> /var/lib/mysql/mysql/time_zone_transition.ibd
lrwx------. 1 mysql mysql 64 Apr  9 10:17 36 -> /var/lib/mysql/mysql/tables_priv.MYI
lrwx------. 1 mysql mysql 64 Apr  9 10:17 37 -> /var/lib/mysql/mysql/tables_priv.MYD
lrwx------. 1 mysql mysql 64 Apr  9 10:17 38 -> /var/lib/mysql/mysql/columns_priv.MYI
lrwx------. 1 mysql mysql 64 Apr  9 10:17 39 -> /var/lib/mysql/mysql/columns_priv.MYD
lrwx------. 1 mysql mysql 64 Apr  9 10:17 40 -> /var/lib/mysql/mysql/procs_priv.MYI
lrwx------. 1 mysql mysql 64 Apr  9 10:17 41 -> /var/lib/mysql/mysql/procs_priv.MYD
lrwx------. 1 mysql mysql 64 Apr  9 10:17 42 -> /var/lib/mysql/mysql/servers.ibd
lrwx------. 1 mysql mysql 64 Apr  9 10:17 43 -> /var/lib/mysql/mysql/event.MYI
lrwx------. 1 mysql mysql 64 Apr  9 10:17 44 -> /var/lib/mysql/mysql/event.MYD
lrwx------. 1 mysql mysql 64 Apr  9 10:17 45 -> /var/lib/mysql/mysql/user.MYD
lrwx------. 1 mysql mysql 64 Apr  9 10:17 46 -> /var/lib/mysql/mysql/db.MYD
lrwx------. 1 mysql mysql 64 Apr  9 10:17 47 -> /var/lib/mysql/mysql/proxies_priv.MYD
lrwx------. 1 mysql mysql 64 Apr  9 10:17 48 -> /var/lib/mysql/mysql/tables_priv.MYD
lrwx------. 1 mysql mysql 64 Apr  9 10:17 49 -> /var/lib/mysql/mysql/columns_priv.MYD
lrwx------. 1 mysql mysql 64 Apr  9 10:17 5 -> /tmp/ibM0L59q (deleted)
lrwx------. 1 mysql mysql 64 Apr  9 10:17 50 -> /var/lib/mysql/mysql/procs_priv.MYD
lrwx------. 1 mysql mysql 64 Apr  9 10:17 6 -> /tmp/ibjidWMR (deleted)
lrwx------. 1 mysql mysql 64 Apr  9 10:17 7 -> /tmp/ib7SYMpi (deleted)
lrwx------. 1 mysql mysql 64 Apr  9 10:17 8 -> /tmp/iblB2PG9 (deleted)
lrwx------. 1 mysql mysql 64 Apr  9 10:17 9 -> /var/lib/mysql/ib_logfile1


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
1月前
|
Linux 网络安全 Docker
盘古栈云,创建带ssh服务的linux容器
创建带ssh服务的linux容器
267 146
|
2月前
|
缓存 安全 Linux
六、Linux核心服务与包管理
在没有网络的情况下,使用系统安装光盘是获取RPM包的常用方法。场景二:配置本地文件镜像源 (使用系统安装光盘/ISO)(检查RPM包的GPG签名以保证安全) 或。YUM/DNF包管理工具 (yum/dnf)(此处可以放置您为本主题制作的思维导图)处理依赖问题的危险选项 (应极力避免)(覆盖文件、替换已安装包)。(list) 则是列出文件。(query file) 是。(假设系统安装光盘已挂载到。信息 (verbose)。(upgrade) 选项。(all) 已安装的包。(package) 选项
278 11
|
6月前
|
Web App开发 Linux 程序员
获取和理解Linux进程以及其PID的基础知识。
总的来说,理解Linux进程及其PID需要我们明白,进程就如同汽车,负责执行任务,而PID则是独特的车牌号,为我们提供了管理的便利。知道这个,我们就可以更好地理解和操作Linux系统,甚至通过对进程的有效管理,让系统运行得更加顺畅。
175 16
|
7月前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
583 25
|
8月前
|
存储 缓存 Linux
Linux系统中如何查看CPU信息
本文介绍了查看CPU核心信息的方法,包括使用`lscpu`命令和读取`/proc/cpuinfo`文件。`lscpu`能快速提供逻辑CPU数量、物理核心数、插槽数等基本信息;而`/proc/cpuinfo`则包含更详细的配置数据,如核心ID和处理器编号。此外,还介绍了如何通过`lscpu`和`dmidecode`命令获取CPU型号、制造商及序列号,并解释了CPU频率与缓存大小的相关信息。最后,详细解析了`lscpu`命令输出的各项参数含义,帮助用户更好地理解CPU的具体配置。
909 8
|
8月前
|
Linux iOS开发 MacOS
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
216 0
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
|
10月前
|
Linux Docker 容器
Linux 中停止 Docker 服务报 warning 导致无法彻底停止问题如何解决?
在 Linux 系统中,停止 Docker 服务时遇到警告无法彻底停止的问题,可以通过系统管理工具停止服务、强制终止相关进程、检查系统资源和依赖关系、以及重置 Docker 环境来解决。通过以上步骤,能够有效地排查和解决 Docker 服务停止不彻底的问题,确保系统的稳定运行。
692 19
|
10月前
|
缓存 安全 Linux
Linux系统查看操作系统版本信息、CPU信息、模块信息
在Linux系统中,常用命令可帮助用户查看操作系统版本、CPU信息和模块信息
1957 23
|
10月前
|
监控 Linux
Linux systemd 服务启动失败Main process exited, code=exited, status=203/EXEC
通过以上步骤,可以有效解决 systemd 服务启动失败并报错 `Main process exited, code=exited, status=203/EXEC` 的问题。关键在于仔细检查单元文件配置、验证可执行文件的有效性,并通过日志分析具体错误原因。确保可执行文件路径正确、文件具有执行权限,并且可以独立运行,将有助于快速定位和解决问题。
4441 7
|
11月前
|
运维 监控 Linux
Linux操作系统的守护进程与服务管理深度剖析####
本文作为一篇技术性文章,旨在深入探讨Linux操作系统中守护进程与服务管理的机制、工具及实践策略。不同于传统的摘要概述,本文将以“守护进程的生命周期”为核心线索,串联起Linux服务管理的各个方面,从守护进程的定义与特性出发,逐步深入到Systemd的工作原理、服务单元文件编写、服务状态管理以及故障排查技巧,为读者呈现一幅Linux服务管理的全景图。 ####