c узнать Как получить текущее имя процесса в Linux?




таблица процессов linux (6)

Я часто использую следующий звонок,

char* currentprocname = getprogname();

Как я могу получить имя процесса в C? То же имя, которое находится в /proc/$pid/status . Я не хочу анализировать этот файл. Есть ли программный способ сделать это?


Если вы используете glibc, то:

#define _GNU_SOURCE
#include <errno.h>

extern char *program_invocation_name;
extern char *program_invocation_short_name;

Смотрите имя_программы_вопроса (3)

В большинстве Unix __progname также определяется libc. Единственный переносимый способ - использовать argv[0]


Вы можете использовать __progname . Однако он не лучше, чем argv[0] так как может иметь проблемы с переносимостью. Но так как у вас нет доступа к argv[0] он может работать следующим образом:

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

Это версия, которая работает на 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

Если вы не можете получить доступ к argv [] в main (), потому что вы реализуете библиотеку, вы можете посмотреть мой ответ на похожий вопрос here .

Это сводится к тому, чтобы дать вам доступ к argc, argv [] и envp [] за пределами main (). Затем вы можете, как другие уже правильно предложили, использовать argv [0] для получения имени процесса.


На это указывает либо argv[0] либо вы можете прочитать /proc/self/status . Или вы можете использовать getenv("_") , не зная, кто это устанавливает и насколько это надежно.







linux