Eu sou o autor e esta resposta está incorreta e deve ser excluída (não é possível excluir, pois é a resposta aceita). Como apontado nos comentários abaixo ele retornará o diretório de trabalho do processo, também conhecido como diretório atual. A menos que o próprio processo tenha alterado seu diretório de trabalho, ele será o diretório a partir do qual o processo foi iniciado, não o diretório do executável. Resumindo: esta resposta está incorreta no contexto da pergunta.
Aqui está uma maneira de fazer isso.
No Solaris, você usaria o comando pargs -ae <pid>
para isso.
A linha que diz argv[0]:
informará qual executável está sendo executado. No entanto, isso não é suficiente, pois você não conhece o diretório atual desse processo quando foi iniciado, portanto, se arg0 não estiver totalmente qualificado, você não terá o caminho completo para o aplicativo em execução. Não tenha medo. Olhe mais abaixo na saída do comando acima e dentro da saída das variáveis de ambiente do processo procure por PWD
. Combine os dois e você terá o caminho completo para o executável.
Veja alguns exemplos de saída de um comando pargs -ae
:
8200: ./sshd
argv[0]: ./sshd
envp[0]: LANG=C
envp[1]: LC_ALL=
envp[2]: LC_COLLATE=
envp[3]: LC_CTYPE=
envp[4]: LC_MESSAGES=
envp[5]: LC_MONETARY=
envp[6]: LC_NUMERIC=
envp[7]: LC_TIME=
envp[8]: PATH=/usr/sbin:/usr/bin
envp[9]: PWD=/usr/lib/ssh
envp[10]: SHLVL=2
envp[11]: SMF_FMRI=svc:/network/ssh:default
envp[12]: SMF_METHOD=start
envp[13]: SMF_RESTARTER=svc:/system/svc/restarter:default
envp[14]: SMF_ZONENAME=myhost1
envp[15]: TZ=localtime
envp[16]: A__z="*SHLVL