在solaris上如何以编程方式获取运行进程的可执行文件的完整路径?

时间:2017-11-24 11:52:49

标签: c solaris

在Ubuntu上,我们可以通过读取/ proc /'pid'/ exe来提取运行进程的exe的完整路径。

在solaris上,/ proc /'pid'中没有'exe'文件。 我读了psinfo。但它只给出了进程和参数的名称。它没有完整的exe路径。 在solaris上我们怎么做? 我的solaris版本是11.3。

2 个答案:

答案 0 :(得分:3)

通过命令,您可以获得如下运行的exe的完整路径:

# ls -l /proc/<pid>/path/a.out

例如

# ls -l /proc/$$/path/a.out
lrwxrwxrwx   1 root     root           0 Nov 24 17:19 /proc/14921/path/a.out -> /usr/bin/bash

这样您就可以获得可执行路径。

更方便的方式是:

# readlink -f /proc/<pid>/path/a.out

例如:

# readlink -f /proc/$$/path/a.out
/usr/bin/bash

以编程方式,您可以这样做:

#include <stdio.h>
#include <unistd.h>

#define BUF_SIZE 1024

int main(int argc, char *argv[]) {
    char outbuf[BUF_SIZE] = {'\0'};
    char inbuf[BUF_SIZE] = {'\0'};
    ssize_t len;

    if (argc != 2) {
            printf ("Invalid argument\n");
            return -1;
    }

    snprintf (inbuf, BUF_SIZE, "/proc/%s/path/a.out", argv[1]);

    if ((len = readlink(inbuf, outbuf, BUF_SIZE-1)) != -1) {
            outbuf[len] = '\0';
    } else {
            perror ("readlink failed: ");
            return -1;
    }

    printf ("%s\n", outbuf);
    return 0;
}

它的用法:

# ./a.out <pid>  

答案 1 :(得分:0)

不确定Solaris,但是一些旧的unix,唯一可以检索的是argv[0]中的命令名称。然后我们必须在PATH环境变量中以正确的顺序搜索该命令,以找到该命令的完整路径。

有点手册但是防弹。