如何从进程ID获取path细节?

为了看到正在运行的进程25014的path,我在Linux上做了以下操作:

ls -l /proc/25014/exe 

输出:

  lrwxrwxrwx 1 root root 0 Mar 9 16:35 /proc/25014/exe -> /etc/syscconfig 

如果我们有Solaris操作系统。 在Solaris上有什么相同的概念? 在Solaris中我们没有exe文件。

我是作者,这个答案是不正确的,应该删除(不能删除,因为它是被接受的答案)。 正如下面的注释中所指出的,它将返回进程的工作目录,即当前目录。 除非进程本身已经改变了它的工作目录,否则它将成为进程启动的目录,而不是可执行文件的目录。 底线:这个问题的答案是不正确的。


这是一种做法。

在Solaris中,您可以使用pargs -ae <pid>命令。

argv[0]:的行会告诉你什么可执行文件正在运行。 然而,这是不够的,因为当它启动时你不知道该进程的当前目录,所以如果arg0没有完全限定,那么你没有完整的path来运行正在运行的应用程序。 不要害怕。 在上面的命令的输出中进一步查看,并在进程的环境variables的输出中查找PWD 。 结合这两者,你有完整的path到可执行文件。

以下是pargs -ae命令的一些示例输出:

 8200: ./sshd argv[0]: ./sshd envp[0]: LANG=C envp[1]: LC_ALL= envp[2]: LC_COLLATE= envp[3]: LC_CTYPE= envp[4]: LC_MESSAGES= envp[5]: LC_MONETARY= envp[6]: LC_NUMERIC= envp[7]: LC_TIME= envp[8]: PATH=/usr/sbin:/usr/bin envp[9]: PWD=/usr/lib/ssh envp[10]: SHLVL=2 envp[11]: SMF_FMRI=svc:/network/ssh:default envp[12]: SMF_METHOD=start envp[13]: SMF_RESTARTER=svc:/system/svc/restarter:default envp[14]: SMF_ZONENAME=myhost1 envp[15]: TZ=localtime envp[16]: A__z="*SHLVL 

最直接的Solaris等价物是/proc/<pid>/path/a.out例如:

 % ls -l /proc/$$/path/a.out lrwxrwxrwx 1 alanc staff 0 Mar 13 21:16 /proc/2892/path/a.out -> /usr/bin/tcsh*