Tentei pesquisar no Google, mas não consigo encontrá-lo. Estou à procura de:
número de threads no processo X
número total de threads em execução atualmente
Tentei pesquisar no Google, mas não consigo encontrá-lo. Estou à procura de:
número de threads no processo X
número total de threads em execução atualmente
Respostas:
Para obter o número de threads para um determinado pid:
ps -o nlwp <pid>
Para obter a soma de todos os threads em execução no sistema:
ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'
ps -o nlwp <pid>
retorna NLWP :), o que isso significa?
ps h -o nlwp $pid
Estou baseando esta resposta ao redor ps axms
. ps
é uma ótima ferramenta para listar o que está sendo executado.
Se você deseja filtrar isso por um processo, tente algo como isto:
echo $(( `ps axms | grep firefox | wc -l` - 1))
Subtraímos 1 porque grep será exibido nessa lista.
Para todos os threads em geral, isso deve funcionar:
echo $(( `ps axms | wc -l` - 1))
Subtraímos um desta vez porque há uma linha de cabeçalho.
Para obter o número total de threads (pequenas partes de um processo em execução simultaneamente) de um, você pode usar o comando ps -o nlwp <pid>
Funciona o tempo todo. Mas se você preferir tentar vê-lo através de um arquivo. você provavelmente deve olhar para os arquivos que foram criados para todo e qualquer processo do sistema. Lá você pode obter os detalhes finais do processo. Para todo e qualquer processo, há uma pasta criada /proc/<pid>
lá, você pode ver todos os outros detalhes também.
No Linux especificamente, aqui está uma maneira de fazê-lo por processo:
#!/bin/sh
while read name val; do
if [ "$name" = Threads: ]; then
printf %s\\n "$val"
return
fi
done < /proc/"$1"/status
Em seguida, você pode invocar esse script com um PID como argumento e ele relatará o número de threads pertencentes a esse processo.
Para obter a contagem de threads para todo o sistema, basta:
#!/bin/sh
count() {
printf %s\\n "$#"
}
count /proc/[0-9]*/task/[0-9]*
Essas abordagens podem parecer um pouco pouco ortodoxas, pois dependem muito dos recursos de shell, mas, em troca, são mais rápidas do que as abordagens correspondentes ps
e awk
baseadas em minha máquina (embora também não criem threads extras próprios para pipes). Lembre-se de que o shell lançado para executar esses scripts terá um thread próprio (ou mais, se você estiver usando uma implementação estranha).