如何知道正在运行的可执行文件的路径?

如何知道正在运行的可执行文件的路径?

我正在 Linux 服务器上工作,并且在不同的节点上运行不同的作业。

然而,在编译我的程序时,我没有设置它们的具体名称,所以它们都是a.out

现在我发现其中一个正在运行a.out,可能不对,想终止。但该Top命令不显示可执行文件的路径。

在此输入图像描述

怎么做?

答案1

您可以使用lsof(几乎适用于任何 Unix 变体,但通常不是默认安装的一部分)列出进程正在使用的所有文件。 “使用”包括打开的文件描述符以及密切相关的概念,例如进程正在运行哪个可执行文件。可执行文件位于txtFD 列中,对于历史原因不明

$ lsof -p1234 | grep txt
a.out    1234 user15964  txt   REG  253,0  34567 /path/to/a.out

(合成输出)

在 Solaris 和 Linux 上,有一种更直接的方法:进程文件系统提供有关每个进程的信息,包括它正在运行的可执行文件。 (至少在 Linux 上,这是lsof获取信息的地方。)

$ ls -l /proc/1234/exe
lrwxrwxrwx 1 root root 0 Feb 30 34:56 /proc/1234/exe -> /path/to/a.out

如果您正在寻找运行给定可执行文件的进程,请运行定影器

$ fuser /path/to/a.out
/path/to/a.out: 1234e 1239e

答案2

没有一般性的答案。在现代 Linux 下,您可以查看数字进程 ID在/proc/$PID哪里。$PID您可以从top输出中获取它。

ls -l /proc/$PID/exe将向您显示exe符号链接的位置。这是可执行文件的完整路径a.out

相关内容