¿Cómo puedo obtener el nombre del proceso en C? El mismo nombre, que está en /proc/$pid/status
. No quiero analizar ese archivo. ¿Hay alguna forma programática de hacer esto?¿Cómo obtener el nombre actual del proceso en Linux?
Respuesta
O bien apuntado por argv[0]
o de hecho puede leer /proc/self/status
. O puede usar getenv("_")
, no estoy seguro de quién lo establece y qué tan confiable es.
Mira el valor de argv[0]
que pasó a main
. Este debería ser el nombre bajo el cual se invocó su proceso.
Puede usar __progname
. Sin embargo, no es mejor que argv[0]
ya que puede tener problemas de portabilidad. Pero como usted no tiene acceso a argv[0]
que puede funcionar de la siguiente manera: -
extern char *__progname;
printf("\n%s", __progname);
Si estás en el uso de un glibc, entonces:
#define _GNU_SOURCE
#include <errno.h>
extern char *program_invocation_name;
extern char *program_invocation_short_name;
Ver program_invocation_name (3)
En la mayoría de los Unices, __progname
también está definido por la libc. La manera portátil único es utilizar argv[0]
menudo hago uso de la siguiente llamada,
char* currentprocname = getprogname();
Eso es específico de BSD. Puede obtenerlo en Linux con 'libbsd', pero no forma parte de libc como en FreeBSD u OS X. – Cairnarvon
Si no puede acceder argv [] en main(), porque va a implementar una biblioteca, puede tener un vistazo a mi respuesta en una pregunta similar here.
Básicamente se reduce a darle acceso a argc, argv [] y envp [] fuera de main(). Entonces podría, como otros ya lo han sugerido correctamente, usar argv [0] para recuperar el nombre del proceso.
o puede consultar/proc/self/cmdline – liang
Esta es una versión que funciona en macOS, FreeBSD y 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
- 1. Cambiar el nombre del proceso en Linux
- 2. ¿Cómo obtener el ID del proceso del nombre del proceso?
- 3. ¿Obtiene el nombre del proceso actual (ejecutable) en Go?
- 4. obtener el nombre del proceso desde el proceso id (win32)
- 5. ¿Cómo obtener el ID de proceso actual?
- 6. PHP Obtener el nombre del directorio actual
- 7. Obtener el nombre del método actual
- 8. Cómo obtener el nombre del proceso en C++
- 9. ¿Cómo obtener el nombre del módulo actual en Haskell
- 10. ¿Cómo obtener el nombre del método actual en Delphi 7?
- 11. Cómo obtener el nombre del tema actual en Magento
- 12. ¿Cómo puedo obtener el nombre del directorio actual en Javascript?
- 13. ¿Cómo sudo el proceso actual?
- 14. ¿Cómo obtener el nombre del proceso de una aplicación?
- 15. Win32API - ¿Cómo obtener el nombre de archivo del proceso desde el control del proceso?
- 16. JavaScript - Cómo obtener el nombre del usuario actual
- 17. ¿Cómo obtener el nombre de nodo primario del nodo actual?
- 18. Obtener nombre del proceso por PID
- 19. ¿Cómo obtener el PID de un proceso dando el nombre del proceso en Mac OS X?
- 20. Obtener el nombre de todos los identificadores en el proceso actual
- 21. Obtener el nombre del archivo actual en Vim
- 22. Obtener el nombre del archivo de secuencia de comandos actual
- 23. Obtener el nombre del método actual que se está ejecutando
- 24. ¿Obtener el nombre de la clase actual?
- 25. En Boost.Test, ¿cómo obtener el nombre de la prueba actual?
- 26. Obtener el nombre del proceso de pid o manejar
- 27. Cómo obtener el nombre de host actual en Heroku
- 28. ¿Cómo puedo obtener el FQDN del host actual en Ruby?
- 29. ¿Cambiar el nombre del proceso en C#?
- 30. ¿Cómo detener el proceso 'ininterrumpible' en Linux?
Tenga en cuenta que 'getenv (" _ ")' parece devolver el proceso iniciado originalmente por el shell - si lo llamo en un proceso iniciado por 'make', veo"/usr/bin/make ", en lugar de mi nombre del proceso. Esto significa que probablemente esté configurado por el shell. –
@RogerLipscombe, buena observación de hecho. –