簡介
psutil (process and system utilities) 是一個跨平臺庫,用於檢索關於Python中運行進程和系統利用率(CPU、內存、磁盤、網絡、傳感器)的信息。
它主要用於系統監視、分析和限制進程資源以及管理正在運行的進程。
它實現了經典UNIX命令行工具(如ps、top、iotop、lsof、netstat、ifconfig、free等)提供的許多功能。
支持Python 2.6, 2.7 和 3.4+
當前支持系統有:
- Linux
- Windows
- macOS
- FreeBSD, OpenBSD, NetBSD
- Sun Solaris
- AIX
安裝
Linux下安裝需要root權限
pip install psutil
CPU
import psutil
print(psutil.cpu_times()) # CPU時間
for x in range(3):
print(psutil.cpu_percent(interval=1)) # CPU利用率,間隔1s
for x in range(3):
print(psutil.cpu_percent(interval=1, percpu=True)) # 每個CPU的利用率
for x in range(3):
print(psutil.cpu_times_percent(interval=1, percpu=False)) # 同cpu_percent(),並給出CPU時間
print(psutil.cpu_count()) # 邏輯CPU數量
print(psutil.cpu_count(logical=False)) # 物理CPU數量
print(psutil.cpu_stats()) # CPU狀態:上下文切換次數、中斷數、軟件中斷數、系統調用數
print(psutil.cpu_freq()) # CPU頻率
print(psutil.getloadavg()) # 平均系統負載(最近1/5/15分鐘)
內存
import psutil
print(psutil.virtual_memory()) # 內存情況
print(psutil.swap_memory()) # 交換內存情況
磁盤
import psutil
print(psutil.disk_partitions()) # 已掛載的磁盤分區,類似UNIX的df命令
print(psutil.disk_usage('C:/')) # 給定路徑分區的磁盤情況
print(psutil.disk_io_counters(perdisk=False)) # 磁盤I/O情況
網絡
需要root權限
import psutil
print(psutil.net_io_counters(pernic=True)) # 網絡I/O情況
print(psutil.net_connections()) # 套接字連接
print(psutil.net_if_addrs()) # 網絡接口,網卡關聯地址
print(psutil.net_if_stats()) # 網卡信息
傳感器
僅Linux和FreeBSD可用
import psutil
print(psutil.sensors_temperatures()) # 硬件溫度
print(psutil.sensors_fans()) # 硬件風扇速度
print(psutil.sensors_battery()) # 電池狀態
其他系統信息
import psutil
print(psutil.boot_time()) # 系統啓動時間
print(psutil.users()) # 當前連接在系統上的用戶
進程
import psutil
import random
print(psutil.pids()) # 當前運行的pid排序列表
p = random.choice(psutil.pids()) # 隨機挑一個進程出來
p = psutil.Process(p)
print(p)
print(p.name()) # 進程名
print(p.exe()) # 進程完整路徑
print(p.cwd()) # 進程所在路徑
print(p.cmdline()) # 進程命令
print(p.pid) # 進程ID
print(p.ppid()) # 父進程ID
print(p.children(recursive=True)) # 遞歸查看子進程
print(p.parent()) # 父進程(對象形式)
print(p.parents()) # 父進程(列表形式)
print(p.status()) # 運行狀態
print(p.username()) # 用戶名
print(p.create_time()) # 創建時間
# print(p.terminal()) # 進程的終端
# print(p.uids()) # 用戶ID
# print(p.gids()) # 用戶組ID
print(p.cpu_times()) # 累計進程時間
print(p.cpu_percent(interval=1.0)) # CPU利用率
print(p.cpu_affinity()) # 關聯的CPU
# print(p.cpu_affinity([0, 1])) # 設置關聯的CPU
# print(p.cpu_num()) # 進程運行的CPU
print(p.memory_info()) # 進程的內存信息
print(p.memory_full_info()) # 進程的完整內存信息
print(p.memory_percent()) # 內存利用率
print(p.memory_maps()) # 進程映射的內存區域
print(p.io_counters()) # IO統計信息
print(p.open_files()) # 打開的文件
print(p.connections()) # 套接字連接
print(p.num_threads()) # 使用的線程數
# print(p.num_fds()) # 打開的文件描述符數量
print(p.threads()) # 進程打開的線程
print(p.num_ctx_switches()) # 進程的上下文切換數量
print(p.nice()) # 進程優先級
# print(p.nice(10)) # 設置進程優先級
print(p.ionice()) # IO優先級
# print(p.ionice(psutil.IOPRIO_CLASS_IDLE)) # 設置IO優先級
# print(p.rlimit(psutil.RLIMIT_NOFILE, (5, 5))) # 設置資源限制
# print(p.rlimit(psutil.RLIMIT_NOFILE)) # 設置資源限制
print(p.environ()) # 進程的環境變量
print(p.as_dict()) # 字典形式的進程信息
print(p.is_running()) # 進程是否正在運行
# print(p.suspend()) # 用SIGSTOP預先檢查PID是否被重用來暫停進程。在Windows上將掛起所有進程線程
# print(p.resume()) # 用SIGSTOP預先檢查PID是否被重用來恢復進程。在Windows上將恢復所有進程線程
# print(p.terminate()) # 用SIGTERM預先檢查PID是否被重用來終止進程。在Windows上相當於kill
# print(p.kill()) # 用SIGTERM預先檢查PID是否被重用來殺死當前進程
# print(p.wait(timeout=3)) # 等待進程終止
更多進程API
import psutil
for proc in psutil.process_iter(['pid', 'name']): # 生成器
print(proc.info)
print(psutil.pid_exists(3)) # 進程ID爲3是否存在
Windows服務
import psutil
print(list(psutil.win_service_iter())) # 所有Windows服務
s = psutil.win_service_get('alg') # 某個服務
print(s.as_dict())