Как получить текущее имя процесса в Linux? - программирование
Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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