터미널에서 총 스레드 수를 얻는 방법 (프로세스 당 및 모든 프로세스의 총계)


답변:


53

주어진 pid에 대한 스레드 수를 얻으려면 :

ps -o nlwp <pid>

시스템에서 실행중인 모든 스레드의 합계를 얻으려면 :

ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'

1
ps -o nlwp <pid>NLWP :)를 반환합니다. 무슨 뜻입니까?
Siddharth

2
@Siddharth NLWP는 스레드 수인 Number of LightWeight Processes를 나타냅니다.
jcollado

"h"(헤더 숨기기)로 "NLWP"를 억제 할 수 있습니다. 즉 :ps h -o nlwp $pid
bufh

7

단일 프로세스를 실행하는 스레드 수를 찾으려면를 참조하십시오 /proc/<pid>/status. 스레드 수를 필드 중 하나로 나열해야합니다.


3

나는이 대답을 근거로 삼고있다 ps axms. ps실행중인 항목을 나열하는 데 유용한 도구입니다.

프로세스별로 필터링하려면 다음과 같이 시도하십시오.

echo $(( `ps axms | grep firefox | wc -l`  - 1))

grep이 해당 목록에 표시되므로 1을 뺍니다.

모든 스레드에서 일반적으로 다음과 같이 작동합니다.

echo $(( `ps axms | wc -l`  - 1))

이번에는 헤더 행이 있으므로 1을 뺍니다.


이 프로세스 당 별도의 스레드를보고 이것은 부정확
Score_Under

1

스레드의 총 수 (동시에 실행되는 작은 프로세스 조각)를 얻으려면 항상 다음 명령을 사용할 수 있습니다 ps -o nlwp <pid>. 그러나 파일을 통해 보려고하면. 시스템의 모든 프로세스마다 작성된 파일을보아야합니다. 거기에서 프로세스의 세부 사항을 얻을 수 있습니다. 각각의 모든 프로세스에 /proc/<pid>대해 다른 세부 사항도 볼 수 있는 폴더가 생성됩니다 .


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]*

이러한 접근 방식은 쉘 기능에 크게 의존한다는 점에서 다소 정통적 인 것처럼 보일 수 있지만 두 가지 모두 해당 기능보다 빠릅니다. psawk내 컴퓨터에 기반 접근 방식은 (또한 파이프에 대한 자신의 여분의 스레드를 생성하지 않으면 서). 이러한 스크립트를 실행하기 위해 시작된 셸에는 자체 스레드 (또는 이상한 구현을 사용하는 경우 그 이상)가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.