use*_*964 3 process executable files
我在 Linux 服务器上工作,我在不同的节点上运行不同的作业。
但是,在编译我的程序时,我没有设置它们的具体名称,所以它们都是 a.out
现在我发现其中一个正在运行a.out,可能不对,想终止。但该Top命令不显示可执行文件的路径。
怎么做?
没有普遍的答案。在现代 Linux 下,您可以查看数字进程 ID在/proc/$PID哪里$PID。你可以把它从top输出中取出来。
ls -l /proc/$PID/exe会告诉你exe符号链接在哪里。这是a.out可执行文件的完整路径。
您可以使用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)