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

use*_*964 3 process executable files

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

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

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

在此处输入图片说明

怎么做?

Bru*_*ger 5

没有普遍的答案。在现代 Linux 下,您可以查看数字进程 ID在/proc/$PID哪里$PID。你可以把它从top输出中取出来。

ls -l /proc/$PID/exe会告诉你exe符号链接在哪里。这是a.out可执行文件的完整路径。


Gil*_*il' 5

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

$ lsof -p1234 | grep txt
a.out    1234 user15964  txt   REG  253,0  34567 /path/to/a.out
Run Code Online (Sandbox Code Playgroud)

(合成输出)

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

$ ls -l /proc/1234/exe
lrwxrwxrwx 1 root root 0 Feb 30 34:56 /proc/1234/exe -> /path/to/a.out
Run Code Online (Sandbox Code Playgroud)

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

$ fuser /path/to/a.out
/path/to/a.out: 1234e 1239e
Run Code Online (Sandbox Code Playgroud)