Eu quero listar todos os processos que estão rodando em um diretório.
Por exemplo, digamos que 3 três processos estão em execução:
/home/myname/myapp/process1
/home/myname/myapp/process2
/home/myname/myapp/anotherprocess
Como eu pediria ao sistema: "Dê-me o PID de todos os processos rodando em /home/myname/myapp
"?
A única maneira que eu posso pensar é
ps -eo pid,args | grep -i /home/myname/myapp | awk '{print $1}' | tr '\n' ' '
Observe que seu comando não lista os processos em execução em um diretório. Ele lista os processos cujos arquivos de imagem de programa foram encontrados (pelo shell) naquele diretório e, portanto, listados como tal em seu 0º argumento de comando (ou que tenham esse diretório mencionado em seus outros argumentos de comando). É claro que esses processos não estão necessariamente em execução nesse diretório. Vou assumir que você quer o que pediu (já que você disse rodando em um diretório três vezes), não o que seu comando realmente fez.
Como você não especificou um sistema operacional:
FreeBSD/TrueOS e OpenBSD
Use a
Execute (somente)-f
opção parafstat
filtrá-lo por sistema de arquivos, use ostat
comando para obter o número do inode do diretório desejado (nomeado na variável shell${directory}
conforme apropriado de antemão) e useawk
para usar o último como um filtro naswd
entradas geradas porfstat
:fstat
como superusuário para incluir processos de outros usuários.Linux
Duas abordagens:
-d
opção paralsof
selecionar apenascwd
entradas, use ostat
comando e algumdc
pós-processamento para obter o número do inode e os números principais/secundários do dispositivo montado do diretório desejado (nomeado na variável shell${directory}
conforme apropriado previamente) e useawk
para usar os dois últimos como um filtro na saÃda delsof
: Execute (somente)lsof
como superusuário para incluir processos de outros usuários.fuser
como em outra resposta.Use
fuser -m /path/to/folder 2>/dev/null
(descartestderr
da saÃda) ou examine os casos de uso disponÃveis comman fuser