環境:オペレーティングシステム--debian + python3。
以下のすべての出力情報は重要ではなく無視されます。
マイコンピュータのCPU情報を取得するには、cat /proc/cpuinfoを使用します。
cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model name : Intel(R) Celeron(R) CPU G1840 @ 2.80GHz
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model name : Intel(R) Celeron(R) CPU G1840 @ 2.80GHz
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
テストするmthreads.pyは次のとおりです。
import os
import threading
print(os.getpid())
def dead_loop():
while True:
pass
t = threading.Thread(target=dead_loop)
t.start()
dead_loop()
t.join()
端末で実行し、のプロセスIDであるpython3 mthreads.py
出力を取得します。3455
python3 mthreads.py
cat /proc/3455/status
Name: python3
Umask: 0022
State: S (sleeping)
Tgid: 3455
Ngid: 0
Pid: 3455
PPid: 2205
Threads: 2
Cpus_allowed: 3
Cpus_allowed_list: 0-1
端末で実行してください。
python3 mthreads.py
3455
1. 私のコンピュータには2つのCPUがありますが、なぜ私のCPUよりも多くのCPUs_allowedが3つですか?
pstree 3455 -p
python3(3455)───{python3}(3456)
2. 現在 2 つのスレッドが実行中です。 3455はプロセスIDであり、3456はスレッドIDである。どちらが別のスレッドIDですか? 2番目のスレッドのID番号を取得する方法は?
3.どのプロセスIDがどのCPU(cpu0、cpu1)で実行されているかを知りたいです。
答え1
- cpus_allowed:このプロセスを実行できるCPUマスク
(Linux 2.6.24以降、cpuset(7)を参照)。
これは、CPUの数ではなく、単にプログラムスレッドがどのCPUで実行されているかを示します。
PPID は親プロセス ID を表します。確認中のプロセスの親プロセスです。
psr現在このプロセスに割り当てられているPSRプロセッサ。
参照用のマニュアルページから直接インポートした例:ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
この情報のほとんどはマニュアルページで見つけることができますが、ここに含まれるものはわかっています。たくさん情報を追跡するのは難しいかもしれません。
答え2
時にはプロセスID =スレッドIDです。
私のコードを見せてください。
python3 mthreads.py
7761
cat /proc/7761/status|grep Threads
Threads: 2
pstree -p 7761
python3(7761)───{python3}(7762)
LWPは予約可能エンティティの軽量プロセス(スレッド)ID(エイリアスspid、tid)を表し、NLWPはman psページのプロセスのlwps(スレッド)数を表します。
ps -p 7761 -f -L
UID PID PPID LWP C NLWP STIME TTY TIME CMD
user 7761 2305 7761 48 2 19:28 pts/1 00:00:09 python3 mthreads.py
user 7761 2305 7762 51 2 19:28 pts/1 00:00:09 python3 mthreads.py
プロセスID--7761には2つのスレッドが含まれています。一方のスレッド ID はプロセス ID と同じ 7761、もう一方のスレッド ID は 7762 です。