Já o postou como comentário, isso deve fazer o que você deseja:
ps -ef | grep "$(ls)"
Eu quero obter o status do processo para todos os serviços em execução em um determinado diretório. Agora posso verificar um por um ps -ef | grep ServiceName
. Mas existe uma maneira de ls
do diretório e ps
de cada serviço?
Algo parecido com ps -ef | grep < ls
?
No Bash:
ps -ef | grep "$(ls)"
(A mesma linha apareceu no comentário do incBrain enquanto eu estava compondo e testando o resto da minha resposta no Debian / Bash.)
Ele gerará lixo se o padrão aparecer em ps
output como um argumento de linha de comando (não o comando) ou como parte do comando. Para reduzir isso, usaria find
em vez de ls
para obter o caminho completo:
ps -ef | grep -f <(find -L "$(pwd)" -maxdepth 1 -type f)
Ainda pode haver algum resultado extra indesejado.
Note que estes não são
services running in a given directory
em vez disso processa com executáveis em um determinado diretório .
Para informar ao diretório de trabalho atual de um processo, você pode ler /proc/<PID>/cwd
. O próximo exemplo é (rápido e sujo) ps
alternative e mostra que você pode extrair informações de /proc
em um formulário que você deseja:
sudo bash -c 'for i in /proc/[1-9]* ; do PID=$(basename "$i"); E=$(readlink "${i}/exe"); D=$(readlink "${i}/cwd"); echo -e "PID=${PID}\tEXE=${E}\tCWD=${D}" ; done | grep "CWD=$(pwd)$"'
Você precisa de sudo
para ter acesso a todos os processos. Se isso não for necessário e você desejar executá-lo como usuário comum, a peça nos delimitadores '
será suficiente.
Talvez algo assim:
processes="$(ps -ef)"
for file in *;do
grep "$file" <<<"$processes"
done