No ambiente Windows, há uma API para obter o caminho que está executando um processo. Existe algo semelhante no Unix / Linux?
Ou existe alguma outra maneira de fazer isso nesses ambientes?
No Linux, o link simbólico /proc/<pid>/exe
tem o caminho do executável. Use o comando readlink -f /proc/<pid>/exe
para obter o valor.
No AIX, esse arquivo não existe. Você pode comparar cksum <actual path to binary>
e cksum /proc/<pid>/object/a.out
.
sudo
se a saída estiver vazia, alguns processos serão criados por outros usuários do sistema.Você pode encontrar o exe facilmente por essas maneiras, tente você mesmo.
ll /proc/<PID>/exe
pwdx <PID>
lsof -p <PID> | grep cwd
fonte
pwdx <PID>
me deu a localização do link simbólico para que eu pudesse encontrar os logs e interromper o processo da maneira correta.ll
geralmente é um apelido:alias ll='ls -alF'
.Um pouco tarde, mas todas as respostas foram específicas para o Linux.
Se você também precisar do unix, precisará do seguinte:
EDITADO: Corrigido o bug relatado por Mark Lakata.
fonte
"/proc/self/exe"
porsprintf(foo,"/proc/%d/exe",pid)
Eu uso:
Substitua 786 pelo seu PID ou nome do processo.
fonte
pwdx <process id>
Este comando buscará o caminho do processo de onde está sendo executado.
fonte
No Linux, todo processo possui sua própria pasta
/proc
. Portanto, você pode usargetpid()
para obter o pid do processo em execução e, em seguida, associá-lo ao caminho/proc
para obter a pasta de que você precisa.Aqui está um pequeno exemplo em Python:
Aqui está o exemplo no ANSI C também:
Compile com:
fonte
Não existe um método "garantido para trabalhar em qualquer lugar".
O passo 1 é verificar o argv [0], se o programa foi iniciado por seu caminho completo, este (normalmente) teria o caminho completo. Se foi iniciado por um caminho relativo, o mesmo se aplica (embora isso exija a obtenção do diretório de trabalho atual, usando getcwd ().
O passo 2, se nenhuma das opções acima se aplica, é obter o nome do programa, obter o nome do programa em argv [0], obter o PATH do usuário no ambiente e passar por isso para verificar se existe um binário executável com o mesmo nome.
Observe que argv [0] é definido pelo processo que executa o programa, portanto, não é 100% confiável.
fonte
agradecimentos: Kiwy
with AIX:
fonte
Você também pode encontrar o caminho no GNU / Linux com (não completamente testado):
Se você deseja que o diretório do executável talvez altere o diretório ativo para o diretório do processo (para mídia / dados / etc), será necessário descartar tudo após o último /:
fonte
O comando abaixo procura o nome do processo na lista de processos em execução e redireciona o comando pid para pwdx para encontrar o local do processo.
Substitua "abc" pelo seu padrão específico.
Como alternativa, se você puder configurá-lo como uma função no .bashrc, poderá achar útil usá-lo se precisar que ele seja usado com frequência.
Por exemplo:
Espero que isso ajude alguém em algum momento .....
fonte
Encontre o caminho para um nome de processo
fonte
pgrep
); na próxima linha, obtém o caminho do binário sendo executado (/proc/$PID/exe
é um link simbólico para o arquivo executável); e finalmente ecoa esse link simbólico.