답변:
주어진 pid에 대한 스레드 수를 얻으려면 :
ps -o nlwp <pid>
시스템에서 실행중인 모든 스레드의 합계를 얻으려면 :
ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'
ps -o nlwp <pid>
NLWP :)를 반환합니다. 무슨 뜻입니까?
ps h -o nlwp $pid
나는이 대답을 근거로 삼고있다 ps axms
. ps
실행중인 항목을 나열하는 데 유용한 도구입니다.
프로세스별로 필터링하려면 다음과 같이 시도하십시오.
echo $(( `ps axms | grep firefox | wc -l` - 1))
grep이 해당 목록에 표시되므로 1을 뺍니다.
모든 스레드에서 일반적으로 다음과 같이 작동합니다.
echo $(( `ps axms | wc -l` - 1))
이번에는 헤더 행이 있으므로 1을 뺍니다.
리눅스에서는 구체적으로 프로세스별로 수행하는 한 가지 방법이 있습니다.
#!/bin/sh
while read name val; do
if [ "$name" = Threads: ]; then
printf %s\\n "$val"
return
fi
done < /proc/"$1"/status
그런 다음 PID를 인수로 사용하여이 스크립트를 호출 할 수 있으며 해당 프로세스가 소유 한 스레드 수를보고합니다.
전체 시스템의 스레드 수를 얻으려면 다음과 같이 충분합니다.
#!/bin/sh
count() {
printf %s\\n "$#"
}
count /proc/[0-9]*/task/[0-9]*
이러한 접근 방식은 쉘 기능에 크게 의존한다는 점에서 다소 정통적 인 것처럼 보일 수 있지만 두 가지 모두 해당 기능보다 빠릅니다. ps
와 awk
내 컴퓨터에 기반 접근 방식은 (또한 파이프에 대한 자신의 여분의 스레드를 생성하지 않으면 서). 이러한 스크립트를 실행하기 위해 시작된 셸에는 자체 스레드 (또는 이상한 구현을 사용하는 경우 그 이상)가 있습니다.