环境:操作系统--debian + python3。
下面的所有输出信息都忽略不重要。
使用 cat /proc/cpuinfo 获取我的计算机的 cpu 信息:
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()
在终端中运行它python3 mthreads.py
,得到输出3455
,即 的进程 ID 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,为什么cpus_allowed是3个,比我的cpu多?
pstree 3455 -p
python3(3455)───{python3}(3456)
2.现在有2个线程在运行,3455是进程id,3456是线程id,哪个是另一个线程id?如何获取第二个线程的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包含两个线程,一个线程id为7761,与进程id相同,另一个线程id为7762。