Come arrivare attuale nome del processo in linux?
Come posso ottenere il nome del processo in C? Lo stesso nome, che è in /proc/$pid/status
. Non voglio analizzare il file. C’è qualche modo programmatico di fare questo?
Comunità online per sviluppatori
Sia che punta il
argv[0]
o, infatti, si può leggere/proc/self/status
. Oppure è possibile utilizzaregetenv("_")
, non sono sicuro che i set e di come affidabile è.getenv("_")
sembra restituire il processo iniziato dalla shell — se io la chiamo in un processo iniziato damake
, vedo “/usr/bin/fare”, piuttosto che il mio nome del processo. Questo significa che probabilmente è impostato dalla shell.Se si sta utilizzando un glibc, quindi:
Vedere program_invocation_name(3)
Nella maggior parte dei sistemi Unix,
__progname
è definito anche dalla libc.L’unico portatile modo è quello di utilizzare
argv[0]
È possibile utilizzare
__progname
. Tuttavia, non è meglio diargv[0]
come si possono avere problemi di portabilità. Ma come non si dispone di accesso aargv[0]
può lavorare come segue:-Guardare il valore di
argv[0]
che è stato passato almain
. Questo dovrebbe essere il nome con il quale il processo è stato richiamato./proc/self/cmdline
.getenv("_")
anche se non so quanto affidabile è.Mi capita spesso di fare uso del seguente chiamata,
libbsd
, ma non è parte della libc in quanto è su FreeBSD o OS X.Se non è possibile accedere argv[] in main(), perché implementazione di una libreria, puoi dare un’occhiata alla mia risposta su una domanda simile qui.
Esso si riduce sostanzialmente a dare accesso a argc, argv[] e envp[] al di fuori del main().
Poi si potrebbe, come altri hanno già correttamente suggerito, utilizzare argv[0] per recuperare il nome del processo.
Questa è una versione che funziona su macOS, FreeBSD e Linux.