Please enable Javascript to view the contents

Linux经验-进程相关操作: ps

 ·  ☕ 3 分钟

进程相关

查看运行时间

通过 -o 参数,指定只显示具体的某个字段,会得到更清晰的结果。
通过 -o etime 获取该进程的运行时间(etime格式 = %d-%h:%m:%s etimes格式 = %s)

1
ps -p 10167 -o etimes,etime

-o rss 可以只获取该进程的内存信息

资源使用率排序

  • 内存使用率 排序
1
ps aux | sort -rnk 4
  • CPU使用率 排序
1
ps aux | sort -nk 3

定位进程文件所在目录

pwdx <pid>

补充说明:需要把命令中的 pid 替换成你需要查询的 pid,常用于查询某个进程的可执行文件路径。如通过 top 命令发现系统中有一个 python test.py 的进程在占用 cpu,但是进程中没有明确显示该文件所在路径,可以使用 top 命令中的 pid 替换上述命令中的 pid,快速定位出 test.py 文件所在目录。

查看进程日志

执行下面命令,获取PID

1
ps -ef |grep <keyword>

执行下面命令

1
file /proc/<pid>/fd/1 

如果输出为/proc/3638989/fd/1: symbolic link to socket:[2131048957],则说明Pid=3638989的进程,socket的inode号为2131048957(此数字不是地址或端口号,而是套接字的唯一标识,在内核中用于区分不同的socket),

执行下面命令

1
ss -p|grep 2131048957

得到如下输出

1
2
3
Netid     State     Recv-Q      Send-Q      Local Address:Port                          Peer Address:Port       Process
u_str     ESTAB     0           0           /run/systemd/journal/stdout 2131050069      * 2131048957            users:(("systemd-journal",pid=8951,fd=24),("systemd",pid=1,fd=60))             
u_str     ESTAB     0           0           * 2131048957                                * 2131050069            users:(("rke2",pid=3638989,fd=2),("rke2",pid=3638989,fd=1))

Netid: 协议类型, u_str表示Unix套接字(也称为本地套接字),用于同一台主机上的进程间通信。
State: 连接状态, ESTAB表示套接字处于已建立(established)状态。这意味着两个进程之间的连接已经成功建立。
Recv-Q: 接收队列中数据,0表示当前没有数据在队列中等待接收。
Send-Q: 发送队列中数据,0表示当前没有数据在队列中等待发送。
Local Address:Port: 本地地址, /run/systemd/journal/stdout本地地址,表示套接字绑定的本地路径; 2131050069本地套接字的inode号;
Peer Address:Port : 远程地址, *本地地址,表示套接字本地路径未指定;
Process: 与套接字关联的进程信息, systemd-journal(8951)的文件描述符24systemd(1)的文件描述符60与当前套接字通信。

结论:套接字socket:[2131048957] 是一个UNIX套接字,连接在本地路径 /run/systemd/journal/stdout 和进程 rke2 之间。进程通信: systemd-journal 和 systemd 进程通过文件描述符与本地套接字通信,而 rke2 进程通过文件描述符1和2与远程套接字通信。• 用途:这种连接通常用于进程间通信,例如日志记录或数据传输。在这种情况下,rke2进程将fd=1和fd=2数据发送到socket:[2131048957], 而对端socket:[2131050069]对应 systemd进程fd=60systemd-journal进程fd=24对应socket文件为/run/systemd/journal/stdout, 从而将rke进程的标准输出、报错发送到systemd-journal,以便进行日志管理。

Reference

Linux常用命令行小技巧: 全面+有深度, 有点乱

80%的人都不会的,15个Linux实用技巧: 清晰,量少

30个高效的Linux命令技巧: Bash语法

1.1 什么是Bash?

分享

Hex
作者
Hex
CloudNative Developer

目录