Como obter os detalhes do caminho do ID do processo?

1

Para ver o caminho do processo de execução 25014 eu faço no Linux o seguinte:

  ls -l /proc/25014/exe

Saída:

 lrwxrwxrwx 1 root root 0 Mar  9 16:35 /proc/25014/exe -> /etc/syscconfig

Caso tenhamos o Solaris OS. Qual o mesmo conceito no Solaris? No Solaris não temos o arquivo exe.

    
por maihabunash 09.03.2015 / 13:11

2 respostas

2

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
    
por 09.03.2015 / 18:00
4

O equivalente mais direto do Solaris é /proc/<pid>/path/a.out Por exemplo:

% ls -l /proc/$$/path/a.out
lrwxrwxrwx   1 alanc    staff          0 Mar 13 21:16 /proc/2892/path/a.out -> /usr/bin/tcsh*
    
por 14.03.2015 / 07:42