如何在linux中获取当前进程名称?

Mar*_*usz 22 c linux

如何在C中获取进程名称?同名,在/proc/$pid/status.我不想解析该文件.有没有任何程序化的方法来做到这一点?

小智 36

如果你正在使用glibc,那么:

#define _GNU_SOURCE
#include <errno.h>

extern char *program_invocation_name;
extern char *program_invocation_short_name;
Run Code Online (Sandbox Code Playgroud)

见program_invocation_name(3)

在大多数Unices下,__progname也是由libc定义的.唯一的便携方式是使用argv[0]


Mic*_*ker 25

它或者指向argv[0]或者你可以阅读/proc/self/status.或者你可以使用getenv("_"),不确定是谁设置它以及它有多可靠.

  • 注意`getenv("_")`似乎返回最初由shell启动的进程 - 如果我在`make`启动的进程中调用它,我看到"/ usr/bin/make",而不是我的进程名称.这意味着它可能是由shell设置的. (3认同)

raj*_*gt1 15

你可以用__progname.然而,它并不比argv[0]它可能具有可移植性问题更好.但由于您无法访问argv[0]它,因此可以按如下方式工作: -

extern char *__progname;
printf("\n%s", __progname);
Run Code Online (Sandbox Code Playgroud)


RLT*_*RLT 5

我经常使用以下电话,

char* currentprocname = getprogname();
Run Code Online (Sandbox Code Playgroud)

  • 那是BSD特有的.您可以使用`libbsd`在Linux上获取它,但它不是libc的一部分,因为它在FreeBSD或OS X上. (5认同)