Comment puis-je obtenir le nom du processus en C? Le même nom, qui est dans /proc/$pid/status
. Je ne veux pas analyser ce fichier. Y a-t-il un moyen programmatique de faire cela?
Ceci est indiqué par le argv[0]
ou bien vous pouvez lire /proc/self/status
. Ou vous pouvez utiliser getenv("_")
, ne sachant pas qui le définit ni s'il est fiable.
Si vous utilisez une glibc, alors:
#define _GNU_SOURCE
#include <errno.h>
extern char *program_invocation_name;
extern char *program_invocation_short_name;
Voir nom_invocation_programme (3)
__progname
est également défini par la bibliothèque libc . La seule méthode portable consiste à utiliser argv[0]
Vous pouvez utiliser __progname
. Cependant, ce n'est pas mieux que argv[0]
car il peut avoir des problèmes de portabilité. Mais comme vous n'avez pas accès à argv[0]
, cela peut fonctionner comme suit: -
extern char *__progname;
printf("\n%s", __progname);
Regardez la valeur de argv[0]
qui a été transmise à main
. Cela devrait être le nom sous lequel votre processus a été appelé.
Je me sers souvent de l'appel suivant,
char* currentprocname = getprogname();
Si vous ne pouvez pas accéder à argv [] dans main (), car vous implémentez une bibliothèque, vous pouvez consulter ma réponse à une question similaire ici .
Cela revient essentiellement à vous donner accès à argc, argv [] et envp [] en dehors de main () . Vous pourriez alors, comme d'autres l'ont déjà correctement suggéré, utiliser argv [0] pour récupérer le nom du processus.
Ceci est une version qui fonctionne sur macOS, FreeBSD et 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