gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:53:56 25 4
gpt4 key购买 nike

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

在 solaris 上/proc/'pid' 中没有 'exe' 文件。我读了psinfo。但它只给出了过程和参数的名称。它没有 exe 的完整路径。在 solaris 上我们如何做到这一点?我的 solaris 版本是 11.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>  

关于c - 在 solaris 上如何以编程方式获取运行进程的可执行文件的完整路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47472762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com