(端末から)スレッドの合計数を取得する方法(プロセスごとおよびすべてのプロセスの合計)


回答:


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を返します:)、それはどういう意味ですか?
シッダールス

2
@Siddharth NLWPは、スレッドの数であるNumber of LightWeight Processesの略です。
-jcollado

「NLWP」を抑制するには、「h」(ヘッダーを隠す)を使用します。例:ps h -o nlwp $pid
bufh

7

単一のプロセスを実行しているスレッドの数を調べるには、をご覧ください/proc/<pid>/status。スレッドの数をフィールドの1つとしてリストする必要があります。


3

私はこの答えに基づいていますps axmsps実行中のものをリストするための素晴らしいツールです。

プロセスでフィルタリングしたい場合は、次のようなものを試すことができます。

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

grepがそのリストに表示されるため、1を減算します。

一般的にすべてのスレッドで、これは機能するはずです。

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

ヘッダー行があるため、今回は1つ減算します。


それは、プロセスごとの余分なスレッドを報告し、これは、不正確である
Score_Under

1

スレッドの合計数(同時に実行されているプロセスの小さな断片)を取得するには、コマンドps -o nlwp <pid>It is always workを使用できます。しかし、あなたがファイルを通してそれを見たいと思うならば。システムの各プロセスごとに作成されたファイルを確認する必要があります。ここで、プロセスの最終的な詳細を取得できます。各プロセスごとにフォルダーが作成され/proc/<pid>、他のすべての詳細も確認できます。


1

特にLinuxでは、プロセスごとに実行する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私のマシン上のベースのアプローチは(もパイプのために自分自身の余分なスレッドを作成されていないが)。これらのスクリプトを実行するために起動されるシェルには、独自のスレッド(または、奇妙な実装を使用している場合はそれ以上)があることに注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.