如何获得当前进程名称在Linux中?

我怎样才能得到C的进程名称? 相同的名称,在/proc/$pid/status 。 我不想parsing这个文件。 有没有这样做的程序化的方式?

Solutions Collecting From Web of "如何获得当前进程名称在Linux中?"

它或者是由argv[0]指向的,或者你可以读/proc/self/status 。 或者你可以使用getenv("_") ,不知道是谁设置的,​​它是多么可靠。

如果你在使用glibc,那么:

 #define _GNU_SOURCE #include <errno.h> extern char *program_invocation_name; extern char *program_invocation_short_name; 

请参阅program_invocation_name(3)

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

你可以使用__progname。 但是它不会比argv [0]更具可移植性,但由于您无法访问argv [0],它可以作为后续工作,

 extern char *__progname; printf("\n%s", __progname); 

看看传递给mainargv[0]的值。 这应该是您的进程被调用的名称。

我经常利用下面的电话,

 char* currentprocname = getprogname(); 

如果你不能访问main()中的argv [],因为你正在实现一个库,你可以在这里看看我的答案。

它基本上归结为让你访问main()之外的argc,argv []和envp []。 那么你可以像其他人已经正确的建议一样使用argv [0]来检索进程名称。

这是一个适用于macOS,FreeBSD和Linux的版本。

 #if defined(__APPLE__) || defined(__FreeBSD__) const char * appname = getprogname(); #elif defined(_GNU_SOURCE) const char * appname = program_invocation_name; #else const char * appname = "?"; #endif