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 pse awkbaseadas 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).