目 录
一、问题
我们经常用如下命令来查看我们关心的进程,
ps -ef | grep xxx
比如,想了解nginx进程的命令操作和结果如下:
[root@ecs-52a1 home]# ps -ef | grep nginx
root 61353 54686 0 17:26 pts/0 00:00:00 grep --color=auto nginx
root 255830 1 0 2月06 ? 00:00:00 nginx: master process /home/vcms_client/sbin/nginx_vcms.out -p /home/vcms_client
nobody 255836 255830 0 2月06 ? 00:00:07 nginx: worker process
root 257409 1 0 2月06 ? 00:00:00 nginx: master process /home/nginx_web/sbin/nginx_client.out -p /home/nginx_web
nobody 257417 257409 0 2月06 ? 00:00:42 nginx: worker process
[root@ecs-52a1 home]#
这里碰到了两个nginx,我的nginx是哪个 ?我的Nginx进程是否正常启动了?
二、解决办法
注意:如下演示环境是centos 7.9
1、方法
如何根据进程的显示,发现进程的正确位置?可以采用如下命令:
ls -l /proc/PID/exe
将PID替换为你要查询的进程的实际ID。这条命令的输出将包括执行程序的完整路径。若这个进程实际的PID是4067405,操作结果如下:
[root@ecs-52a1 home]#
[root@ecs-52a1 home]# ls -l /proc/4067405/exe
lrwxrwxrwx 1 nobody nobody 0 Mar 9 22:29 /proc/4067405/exe -> /home/iVMS_x64/nginx_web/sbin/nginx.out
[root@ecs-52a1 home]#
2、解释
/proc文件系统是一个虚拟文件系统,它为内核和进程之间提供了一个接口。对于每个进程,/proc下都有一个以PID命名的目录。这个目录下的cwd符号链接指向了进程当前的工作目录,而exe符号链接则指向了执行程序的绝对路径。
因此,我们可以使用命令 “ls -l /proc/PID/exe” 来查看某个PID对应的程序的绝对路径。
三、其他方法
可以使用多种命令来查看某个PID(进程ID)对应的进程的程序位置。以下是几种常用的方法:
1,使用pwdx PID
pwdx命令也可以用来显示进程的当前工作目录和可执行文件的路径。例如:
pwdx PID
同样,将PID替换为你要查询的进程的实际ID。这条命令的输出将包括进程的当前工作目录和可执行文件的路径,如下所示。
[root@ecs-52a1 home]#
[root@ecs-52a1 home]# pwdx 4067405
4067405: /home/iVMS_x64/nginx_web
[root@ecs-52a1 home]#
[root@ecs-52a1 home]#
2,使用lsof -p <PID> | grep cwd
如下这个命令组合的可以找到与特定进程相关的当前工作目录的路径。
lsof -p <PID> | grep cwd
解释如下:
- lsof -p <PID>: 这个命令会列出与指定进程ID(<PID>)相关的所有打开的文件。
- grep cwd: 这个命令会从上一步的输出中筛选出包含“cwd”的行。在 /proc 文件系统中,每个进程的目录都包含一个名为 cwd 的符号链接,它指向该进程的当前工作目录。
具体操作如下所示:
[root@ecs-52a1 home]#
[root@ecs-52a1 home]# lsof -p 4067405 | grep cwd
nginx.out 4067405 nobody cwd DIR 253,1 4096 2884153 /home/iVMS_x64/nginx_web
[root@ecs-52a1 home]#
[root@ecs-52a1 home]#
以上就是在CentOS中查看某个PID对应的进程的程序位置的几种常用方法。你可以根据自己的需要选择合适的方法。