linux通过进程pid号查找程序运行文件目录

有时候会遇到这样的情况,能看到程序的进程号,但不知道程序的目录在哪里?可以通过下面的文章了解一下方法。

执行步骤

1. 通过ps命令查询正在运行程序的进程号

$ ps -aux|grep java
root     22684     1  0 Feb23 ?        01:26:21 /data/app/jdk1.8.0_221/bin/java -jar pd-auth-server.jar

2. 通过进程的状态目录查看运行目录

$ cd /proc/22684
# 可以看到该程序所在目录
$ ll cwd
lrwxrwxrwx 1 root root 0 Mar  3 14:29 cwd -> /data/app/ofpay

# 可以看到调用的程序
$ ll exe
lrwxrwxrwx 1 root root 0 Feb 23 17:22 exe -> /data/app/jdk1.8.0_221/bin/java

关于/proc

Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。

/proc/{pid}目录下常见的文件介绍

cmdline

启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息;可使用 more /proc/{pid}/cmdline 查看

# 找到一个进程,进到该进程的目录
$ cd /proc/22684
# 查看cmdline,
$ cat cmdline 
/data/app/jdk1.8.0_221/bin/java-jarpd-auth-server.jar

cwd

指向当前进程运行目录的一个符号链接;

$ cd /proc/22684
$ ll cwd
lrwxrwxrwx 1 root root 0 Mar  3 14:29 cwd -> /data/app/ofpay

exe

指向启动当前进程的可执行文件(完整路径)的符号链接,通过/proc/N/exe可以启动当前进程的一个拷贝;

$ cd /proc/22684
$ ll exe
lrwxrwxrwx 1 root root 0 Feb 23 17:22 exe -> /data/app/jdk1.8.0_221/bin/java

fd

这是个目录,包含当前进程打开的每一个文件的文件描述符(file descriptor),这些文件描述符是指向实际文件的一个符号链接.

$ cd /proc/22684/fd
$ ll
lr-x------ 1 root root 64 Feb 23 17:22 0 -> /dev/null
l-wx------ 1 root root 64 Feb 23 17:22 1 -> /data/app/ofpay/logs/pd-auth-server.log
l-wx------ 1 root root 64 Feb 23 17:22 10 -> /data/projects/logs/pd-auth-server/service.log
lrwx------ 1 root root 64 Mar  4 06:29 100 -> socket:[135031013]
lrwx------ 1 root root 64 Feb 29 12:26 101 -> socket:[135026985]
lrwx------ 1 root root 64 Feb 25 18:18 102 -> socket:[135027089]
lrwx------ 1 root root 64 Feb 23 17:29 103 -> socket:[134948665]
l-wx------ 1 root root 64 Feb 29 00:43 105 -> /data/projects/logs/pd-auth-server/root.log
lr-x------ 1 root root 64 Feb 29 16:24 106 -> /tmp/+~JF7078255511986524517.tmp
lr-x------ 1 root root 64 Feb 29 16:25 107 -> /tmp/+~JF2639114678156368692.tmp
lr-x------ 1 root root 64 Feb 29 16:25 109 -> /tmp/+~JF4658784623086533328.tmp
l-wx------ 1 root root 64 Feb 23 17:22 11 -> /data/projects/logs/pd-auth-server/controller.log
l-wx------ 1 root root 64 Feb 23 17:22 12 -> /data/projects/logs/pd-auth-server/dao.log
l-wx------ 1 root root 64 Feb 23 17:22 13 -> /data/projects/logs/pd-auth-server/dao.log
l-wx------ 1 root root 64 Feb 23 17:22 14 -> /data/projects/logs/pd-auth-server/dao.log
l-wx------ 1 root root 64 Feb 23 17:22 15 -> /data/projects/logs/pd-auth-server/exception.log
lr-x------ 1 root root 64 Feb 23 17:23 16 -> /data/app/jdk1.8.0_221/jre/lib/charsets.jar
lr-x------ 1 root root 64 Feb 23 17:22 17 -> /data/app/jdk1.8.0_221/jre/lib/jsse.jar
......

maps

当前进程关联到的每个可执行文件和库文件在内存中的映射区域及其访问权限所组成的列表;

$ cd /proc/22684/
$ cat maps
7fe628000000-7fe628001000 r--s 0000e000 fd:01 1057311                    /data/app/jdk1.8.0_221/jre/lib/ext/sunec.jar
7fe628001000-7fe628005000 r--s 0003b000 fd:01 1057312                    /data/app/jdk1.8.0_221/jre/lib/ext/sunpkcs11.jar
7fe628005000-7fe628020000 r--s 001d4000 fd:01 1057310                    /data/app/jdk1.8.0_221/jre/lib/ext/nashorn.jar
7fe628020000-7fe628025000 r--s 002f9000 fd:01 1057418                    /data/app/jdk1.8.0_221/jre/lib/charsets.jar
7fe628025000-7fe628038000 r--s 00345000 fd:01 1057600                    /data/app/jdk1.8.0_221/jre/lib/resources.jar
7fe628038000-7fe628054000 r--s 00393000 fd:01 1057313                    /data/app/jdk1.8.0_221/jre/lib/ext/cldrdata.jar
7fe628054000-7fe628357000 rw-p 00000000 00:00 0 
7fe628357000-7fe628531000 r--s 03d88000 fd:01 1057338                    /data/app/jdk1.8.0_221/jre/lib/rt.jar
......

stat

当前进程的状态信息,包含一系统格式化后的数据列,可读性差,通常由ps命令使用;

$ more stat
22684 (java) S 1 22683 21860 0 -1 1077944320 942701 0 18 0 225359 293548 0 0 20 0 109 0 892468877 4916166656 175959 18446744073709551615 4194304 419628
4 140723913966976 140723913949632 140626560466759 0 0 3 16800972 18446744073709551615 0 0 17 0 0 0 0 0 0 6294936 6295608 38010880 140723913967629 14072
3913967685 140723913967685 140723913969624 0

status

与stat所提供信息类似,但可读性较好,如下所示,每行表示一个属性信息;

cat status 
Name:   java
Umask:  0022
State:  S (sleeping)
Tgid:   22684
Ngid:   0
Pid:    22684
PPid:   1
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 256
Groups: 0 
VmPeak:  4800948 kB
VmSize:  4800944 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:    998508 kB
VmRSS:    703836 kB
......
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Linux中,我们可以通过以下几种方式查看某个进程运行的具体程序名: 1. 使用ps命令:输入`ps -p <进程ID>`来查看该进程的详细信息,包括程序名。例如,输入`ps -p 1234`,其中1234是目标进程进程ID。 2. 使用pgrep命令结合ps命令:首先使用`pgrep <程序名>`来查找目标进程进程ID,然后再使用`ps -p <进程ID>`来查看进程的详细信息。例如,输入`pgrep firefox`将返回Firefox浏览器的进程ID,然后再运行`ps -p <进程ID>`查看该进程的详细信息。 3. 使用top命令:运行`top`命令后,按下`Shift + c`,将显示正在运行的进程列表,其中包括程序名。 4. 使用htop命令:htop是top命令的增强版,可以更直观地查看系统中运行的进程。运行`htop`命令后,即可显示正在运行的进程列表,其中包括程序名。 这些方法可以帮助我们在Linux系统中查看某个进程运行的具体程序名。 ### 回答2: 要查看Linux某个进程运行的具体程序名,可以使用以下方法: 1. 使用ps命令:在终端执行以下命令可以查看系统中运行的进程及其对应的程序名: `ps -p <pid> -o comm=` 其中,`<pid>`是要查看的进程PID进程ID)。这将显示指定进程程序名。 2. 使用pgrep命令:在终端执行以下命令可以查看满足特定条件的进程及其对应的程序名: `pgrep -l <name>` 其中,`<name>`是要查找程序名关键字。这将显示包含指定关键字的进程及其程序名。 3. 使用lsof命令:在终端执行以下命令可以查看指定进程所打开的文件及对应的程序名: `lsof -p <pid>` 其中,`<pid>`是要查看的进程PID。这将显示指定进程打开的文件和对应的程序名。 4. 使用/proc文件系统:在终端执行以下命令可以通过/proc文件系统查看进程对应的程序名: `ls -l /proc/<pid>/exe` 其中,`<pid>`是要查看的进程PID。这将显示指定进程的可执行文件路径。 需要注意的是,这些方法在Linux系统中都可以使用,可以根据具体需求选择使用。 ### 回答3: 在Linux系统上,可以使用以下几种方法来查看某个进程运行的具体程序名: 1. 使用ps命令查看进程信息:在终端中输入"ps -ef | grep 进程ID"(其中进程ID为要查看的进程PID),会列出与该进程相关的进程信息。从输出结果中可以查找进程的具体程序名。 2. 使用top命令查看进程信息:在终端中输入"top"命令,会显示当前系统中运行的进程信息。通过按下"Shift + f"键,再选择通过哪个字段排序,可以方便地找到目标进程,并查看其具体程序名。 3. 使用lsof命令查看进程打开的文件:在终端中输入"lsof -p 进程ID"(其中进程ID为要查看的进程PID),lsof命令会显示该进程打开的所有文件和文件描述符。从输出结果中找到进程对应的可执行文件路径,即可确认其具体程序名。 4. 使用/proc文件系统查看进程信息:在终端中进入/proc目录(cd /proc),然后进入要查看的进程的对应目录(例如cd 进程ID),进入该目录后使用"cat cmdline"命令,可以查看到进程的命令行参数,从中可以确定进程的具体程序名。 通过以上方法,可以在Linux系统中查看某个进程运行的具体程序名。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值