Как я могу получить имя процесса в C? То же имя, которое находится в /proc/$pid/status
. Я не хочу разбирать этот файл. Есть ли программный способ сделать это?
Как получить текущее имя процесса в Linux?
Ответ 1
Он либо указал на argv[0]
, либо вы можете прочитать /proc/self/status
. Или вы можете использовать getenv("_")
, не знаете, кто устанавливает это и насколько он надежный.
Ответ 2
Если вы используете glibc, то:
#define _GNU_SOURCE
#include <errno.h>
extern char *program_invocation_name;
extern char *program_invocation_short_name;
См. имя_программы (3)
В большинстве Unices __progname
также определяется libc.
Единственный переносной способ - использовать argv[0]
Ответ 3
Вы можете использовать __progname
. Однако это не лучше, чем argv[0]
, поскольку это может иметь проблемы с переносимостью. Но поскольку у вас нет доступа к argv[0]
, он может работать следующим образом: -
extern char *__progname;
printf("\n%s", __progname);
Ответ 4
Посмотрите на значение argv[0]
, которое было передано main
. Это должно быть имя, под которым был вызван ваш процесс.
Ответ 5
Я часто использую следующий вызов,
char* currentprocname = getprogname();
Ответ 6
Если вы не можете получить доступ к argv [] в main(), потому что вы реализуете библиотеку, вы можете посмотреть мой ответ по аналогичному вопросу здесь.
В основном это сводится к предоставлению вам доступа к argc, argv [] и envp [] вне main(). Тогда вы могли бы, как уже правильно предложили другие, использовать argv [0] для получения имени процесса.
Ответ 7
Это версия, которая работает на 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