Linux进程相关命令使用场景
在Linux系统上工作时,我们常常会碰到很多和进程相关的查询场景,今天在这里进行详细的讲解,进程相关的对象包括以下几个:
- 端口:Port
- 进程号:PId
- 执行文件所在路径:executePath
从端口号到进程号
使用lsof -i:PortId
进行查找(该命令只能使用root用户的身份运行),可以找到占用该端口的进程信息,如下:
| COMMAND | PID | USER | FD | TYPE | DEVICE | SIZE/OFF | NODE | NAME |
|:---|---:|
| svnserve | 29080 | root | 3u | IPv4 | 1075776 | 0t0 |TCP | *:svn (LISTEN)
COMMAND:进程名
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点
NAME:打开文件的确切名称
提示:lsof(list open files)本质上是显示系统打开的文件,Linux系统上所有的内容都以文件的形式存在,所以如果某个端口被某个进程监听了,那么一定存在相应的文件,lsof显示的信息就是这个文件的信息。
从进程号到执行文件位置
使用lsof -p PId
进行查找(该命令只能用root用户的身份运行),可以找到相关文件的路径,如下所示:
|COMMAND | PID |USER| FD | TYPE | DEVICE| SIZE/OFF| NODE| NAME|
|:----------|-------:|
|dockerd-c |2884| root| cwd| DIR | 8,2| 224 | 64 |/|
|dockerd-c| 2884 |root | rtd | DIR | 8,2 | 224 | 64 |/|
|dockerd-c| 2884 |root| txt | REG | 8,2| 33358400 | 25379352| /usr/bin/dockerd-current|
|dockerd-c| 2884 |root | mem | REG| 8,2| 61624 | 141124 |/usr/lib64/libnss_files-2.17.so|
|dockerd-c| 2884 |root | mem | REG | 8,2 | 68192 | 13282 |/usr/lib64/libbz2.so.1.0.6|
在最后的一列的Name中应该就包含你需要寻找的路径
从进程名称到进程号
使用ps aux | grep PName
进行查找,如下所示:
|USER | PID |%CPU |%MEM | VSZ | RSS |TTY | STAT| START | TIME |COMMAND|
|:-----
|root | 2884 | 0.0 | 2.8 |735672 |28660 |? | Ssl | 05:04 | 0:18 |/usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --init-path=/usr/libexec/docker/docker-init-current --seccomp-profile=/etc/docker/seccomp.json --selinux-enabled=false --insecure-registry gcr.io --storage-driver overlay2|
其实在ps aux
的查询中可以找到命令的路径,只是看上去不那么好看而已
总结
所有和进程相关的信息,都需要以PId为基础,从PId出发我们可以查询到一切我们需要的信息,主要的命令记住三个就行:lsof -i
,lsof -p
,ps aux