Como posso obter o número PID e a pasta onde funciona?
Se eu executar 2 programas iguais em pastas diferentes:
/var/www/public_html/first_folder/test.jar <i>(it runs all the time)</i>
/var/www/public_html/second_folder/test.jar <i>(it runs all the time)</i>
Se eu executar este comandops aux | grep test.jar
Resultado:
www-data 3766 0.5 3.8 2959916 75616 ? Sl 15:01 0:13 java -jar test.jar
www-data 4239 3.4 4.1 2959916 82432 ? Sl 15:31 0:18 java -jar test.jar
Não sei qual é o PID - primeira pasta ou segunda.
No Linux, você pode encontrar o diretório de trabalho de um processo em
/proc/$pid/cwd
. É um link simbólico mágico que aponta para o diretório de trabalho./proc/$pid/cmdline
fornece a linha de comando do processo, mas é separada com bytes NUL, portanto, precisa de algum processamento. Você poderia fazer, por exemplo, algo assim para obter os diretórios de trabalho e as linhas de comando de vários programas que correspondam a algumapgrep
condição:Claro, se você já pesquisou o PID com, por exemplo
ps
, apenasls -l /proc/<PID>/cwd
oureadlink /proc/<PID>/cwd
faria.Você também pode usar
lsof
, mas não sei como fazer com que mostre os argumentos da linha de comando do programa.No FreeBSD, isso pode ser obtido de maneira semelhante por meio do
fstat
comando, embora obter o caminho real seja um pouco mais complicado e lento:Explicação
pgrep pattern
- examina os processos em execução no momento e lista os IDs de processo que correspondem ao padrão.pwdx
- relatar o diretório de trabalho atual de um processo.teste
lsof
é seu amigo aqui:A segunda coluna mostra o PID.