查找当前正在运行的进程的可执行文件的位置

查找当前正在运行的进程的可执行文件的位置

如果我有 2 个可执行文件(/path/to/gcc/myapp.exe、 和/path/to/intel/myapp.exe),其中一个使用 intel 编译器编译,另一个使用标准 gcc 编译,则运行这两个文件时都将显示topmyapp。如果我运行这两个文件,并且进程以 运行myapp,有没有办法找出哪个进程来自哪个可执行文件?

我们的集群上安装了许多应用程序,我感兴趣的不仅是哪些应用程序使用得最多,还版本的应用程序正在使用。如果我看到 500 次R运行,我想知道其中 100 次是否来自/path/to/R-3.2.1/intel/R,其他 400 次是否来自/path/to/R-3.1.3/gcc/R,等等。我该怎么做?

答案1

您可以使用/proc文件系统执行此操作,如proc(5)手册页:

/proc/[pid]/exe

在 Linux 2.2 及更高版本中,此文件是一个符号链接,包含所执行命令的实际路径名。

因为它是一个符号链接,您可以阅读目标(执行ls -l来查看路径名)。

当然,这[pid]意味着在运行时您感兴趣的特定可执行文件的进程 ID。

(您的系统不太可能运行那么旧的 Linux 内核,因此“始终有效”应该足够了)。

要获得计数,你只需要一个脚本来遍历/proc你拥有的每个目录(因为你正在运行程序,所以你可以看到它们的/proc数据),并将路径名与你感兴趣的路径名进行匹配。readlink例如,程序在 Bash 脚本中很有用(并且因为它是 的一部分coreutils,所以您很可能在 Linux 系统上使用它)。

答案2

为此,您可以启动top,然后按下c键盘上的按钮切换完整路径视图。

答案3

如果这些进程是使用不同的命令行执行的(例如,使用完整路径),您可以按c显示/隐藏执行该进程的完整命令行。

相关内容