本文目录导读:

我来介绍几种获取进程信息的脚本方法,涵盖不同操作系统和需求场景:
Linux/Mac 系统脚本
Bash 脚本
#!/bin/bash # 获取所有进程信息 echo "=== 所有进程 ===" ps aux # 获取指定进程 echo "=== 查找特定进程 ===" ps aux | grep "python" # 按内存排序 echo "=== 按内存使用排序 ===" ps aux --sort=-%mem | head -20 # 按CPU使用排序 echo "=== 按CPU使用排序 ===" ps aux --sort=-%cpu | head -20 # 获取进程树 echo "=== 进程树 ===" pstree -p # 监控实时进程 echo "=== 实时进程监控 ===" top -b -n 1 # 获取进程详细信息 echo "=== PID 的详细信息 ===" pid=1234 ps -p $pid -o pid,user,command,%cpu,%mem,start,etime cat /proc/$pid/status cat /proc/$pid/cmdline # 获取网络连接情况 echo "=== 网络连接 ===" netstat -tunlp | grep $pid
高级 Bash 脚本
#!/bin/bash
# 获取进程信息的完整脚本
get_process_info() {
echo "=============================="
echo "进程信息报告"
echo "生成时间: $(date)"
echo "=============================="
# 进程总数
echo "进程总数: $(ps aux | wc -l)"
# 用户进程分布
echo -e "\n各用户进程数:"
ps aux | awk '{print $1}' | sort | uniq -c | sort -rn
# 内存使用TOP10
echo -e "\n内存使用TOP 10:"
ps aux --sort=-%mem | head -11 | tail -10
# CPU使用TOP10
echo -e "\nCPU使用TOP 10:"
ps aux --sort=-%cpu | head -11 | tail -10
# 僵尸进程
echo -e "\n僵尸进程:"
ps aux | awk '$8=="Z" {print $0}'
# 进程状态统计
echo -e "\n进程状态统计:"
ps aux | awk '{print $8}' | sort | uniq -c | sort -rn
}
get_specific_process() {
pattern=$1
echo "正在搜索: $pattern"
ps aux | grep "$pattern" | grep -v grep
}
get_process_tree() {
pid=$1
echo "进程 $pid 的父子关系:"
cmpid=$pid
# 向上追溯直至根进程
while [ $cmpid -ne 0 ]; do
info=$(ps -p $cmpid -o pid=,ppid=,comm=)
echo " $info"
cmpid=$(ps -p $cmpid -o ppid=)
# 防止死循环
if [ $cmpid -eq $pid ]; then
break
fi
done
}
# 主函数
case "$1" in
all)
get_process_info
;;
search)
get_specific_process "$2"
;;
tree)
get_process_tree "$2"
;;
*)
echo "用法: $0 {all|search <关键字>|tree <PID>}"
;;
esac
Python 脚本
使用 psutil 库
#!/usr/bin/env python3
import psutil
import os
import time
from datetime import datetime
class ProcessInfo:
def __init__(self):
self.processes = []
def get_all_processes(self):
"""获取所有进程信息"""
for proc in psutil.process_iter(['pid', 'name', 'username',
'cpu_percent', 'memory_percent',
'status', 'create_time', 'cmdline']):
try:
pinfo = proc.info
pinfo['create_time'] = datetime.fromtimestamp(
pinfo['create_time']
).strftime('%Y-%m-%d %H:%M:%S')
self.processes.append(pinfo)
except (psutil.NoSuchProcess, psutil.AccessDenied,
psutil.ZombieProcess):
continue
return self.processes
def get_process_detail(self, pid):
"""获取单个进程详细信息"""
try:
proc = psutil.Process(pid)
info = {
'pid': proc.pid,
'name': proc.name(),
'status': proc.status(),
'cpu_percent': proc.cpu_percent(interval=1),
'memory_percent': proc.memory_percent(),
'memory_rss': proc.memory_info().rss / (1024**2), # MB
'memory_vms': proc.memory_info().vms / (1024**2), # MB
'threads': len(proc.threads()),
'create_time': datetime.fromtimestamp(
proc.create_time()
).strftime('%Y-%m-%d %H:%M:%S'),
'cmdline': ' '.join(proc.cmdline()),
'username': proc.username(),
'connections': len(proc.connections()),
'open_files': len(proc.open_files())
}
return info
except psutil.NoSuchProcess:
return f"进程 {pid} 不存在"
except psutil.AccessDenied:
return f"没有权限访问进程 {pid}"
except Exception as e:
return f"错误: {e}"
def get_children_processes(self, pid):
"""获取子进程"""
try:
proc = psutil.Process(pid)
children = proc.children(recursive=True)
return [(child.pid, child.name()) for child in children]
except:
return []
def monitor_process(self, pid, interval=2, duration=10):
"""监控进程性能"""
print(f"开始监控进程 {pid},每 {interval} 秒采样一次,共 {duration} 秒")
proc = psutil.Process(pid)
samples = []
start_time = time.time()
while time.time() - start_time < duration:
try:
cpu_percent = proc.cpu_percent(interval=interval)
mem_percent = proc.memory_percent()
memory_mb = proc.memory_info().rss / (1024**2)
threads = proc.num_threads()
sample = {
'time': time.strftime('%H:%M:%S'),
'cpu': cpu_percent,
'memory': mem_percent,
'memory_mb': memory_mb,
'threads': threads
}
samples.append(sample)
print(f"时间: {sample['time']}, CPU: {sample['cpu']}%, "
f"内存: {sample['memory']:.2f}%, "
f"RSS: {sample['memory_mb']:.1f}MB, "
f"线程: {sample['threads']}")
except Exception as e:
print(f"监控错误: {e}")
break
return samples
# 使用示例
if __name__ == "__main__":
pi = ProcessInfo()
# 获取所有进程
processes = pi.get_all_processes()
print(f"共有 {len(processes)} 个进程")
# 打印前10个
for proc in processes[:10]:
print(f"PID: {proc['pid']}, 名称: {proc['name']}, "
f"用户: {proc['username']}, CPU: {proc['cpu_percent']}%, "
f"内存: {proc['memory_percent']:.2f}%")
# 获取特定进程详情
pid = int(input("请输入PID查看详情: "))
print(pi.get_process_detail(pid))
# 获取子进程
print("子进程:", pi.get_children_processes(pid))
# 监控进程
pi.monitor_process(pid, interval=1, duration=5)
Windows 脚本
PowerShell 脚本
# 获取所有进程
Get-Process
# 按内存排序
Get-Process | Sort-Object -Property WorkingSet64 -Descending | Select-Object -First 10
# 查看特定进程
Get-Process -Name "chrome"
# 查看进程详细信息
Get-WmiObject Win32_Process | Select-Object Name, ProcessId, VirtualSize, WorkingSetSize
# 获取进程路径
Get-Process | Select-Object Name, Id, Path
# 实时监控
while ($true) {
Clear-Host
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 | Format-Table
Start-Sleep -Seconds 2
}
批处理脚本 (cmd)
@echo off :: 列出所有进程 tasklist :: 列出指定进程 tasklist /FI "IMAGENAME eq chrome.exe" :: 按内存排序 tasklist /FO CSV /NH > temp.csv type temp.csv | sort /R :: 获取进程详细信息 wmic process list full | findstr /i "Name=chrome.exe" :: 系统信息 systeminfo :: 资源使用 typeperf "\Process(*)\% Processor Time" /sc 2 pause
跨平台工具
使用 psutil 的 Python 脚本(跨平台)
import psutil
import json
def get_system_cross_platform():
"""跨平台获取进程信息"""
data = {
'os_name': psutil.os_name,
'cpu_count': psutil.cpu_count(),
'memory_percent': psutil.virtual_memory().percent,
'disk_usage': {},
'processes': []
}
# 磁盘使用
for disk in psutil.disk_partitions():
try:
usage = psutil.disk_usage(disk.mountpoint)
data['disk_usage'][disk.device] = {
'mount_point': disk.mountpoint,
'total': usage.total / (1024**3), # GB
'used': usage.used / (1024**3),
'free': usage.free / (1024**3),
'percent': usage.percent
}
except:
pass
# 进程信息
for proc in psutil.process_iter(['pid', 'name', 'cpu_percent']):
try:
data['processes'].append(proc.info)
except:
continue
return data
# 输出JSON格式
print(json.dumps(get_system_cross_platform(), indent=2))
监控和告警脚本
#!/usr/bin/env python3
import psutil
import smtplib
import os
from email.mime.text import MIMEText
class ProcessMonitor:
def __init__(self, threshold_cpu=80, threshold_mem=90):
self.threshold_cpu = threshold_cpu
self.threshold_mem = threshold_mem
self.alerts = []
def check_high_cpu_processes(self):
"""检查CPU使用率过高的进程"""
cpu_usage = psutil.cpu_percent(interval=1)
if cpu_usage > self.threshold_cpu:
self.alerts.append(f"系统CPU使用率过高: {cpu_usage}%")
for proc in psutil.process_iter(['pid', 'name', 'cpu_percent']):
if proc.info['cpu_percent'] and proc.info['cpu_percent'] > self.threshold_cpu:
self.alerts.append(
f"进程 {proc.info['name']} (PID:{proc.info['pid']}) "
f"CPU使用率: {proc.info['cpu_percent']}%"
)
def check_high_memory_processes(self):
"""检查内存使用率过高的进程"""
vm = psutil.virtual_memory()
if vm.percent > self.threshold_mem:
self.alerts.append(f"系统内存使用率过高: {vm.percent}%")
for proc in psutil.process_iter(['pid', 'name', 'memory_percent']):
if proc.info['memory_percent'] and proc.info['memory_percent'] > self.threshold_mem:
self.alerts.append(
f"进程 {proc.info['name']} (PID:{proc.info['pid']}) "
f"内存使用率: {proc.info['memory_percent']:.1f}%"
)
def check_process_count(self):
"""检查进程数量"""
process_count = len(list(psutil.process_iter()))
if process_count > 1000:
self.alerts.append(f"进程数量过多: {process_count}")
def generate_report(self):
"""生成监控报告"""
self.check_high_cpu_processes()
self.check_high_memory_processes()
self.check_process_count()
if self.alerts:
report = "\n".join(self.alerts)
print(f"[ALERT] {len(self.alerts)} 条告警:\n{report}")
# 可以在这里发送邮件
# self.send_email(report)
else:
print("[OK] 系统正常")
def send_email(self, message):
"""发送邮件告警(需配置)"""
# 邮件配置
msg = MIMEText(message)
msg['Subject'] = "系统进程告警"
msg['From'] = "monitor@example.com"
msg['To'] = "admin@example.com"
# smtp配置
try:
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login("your_email", "your_password")
server.send_message(msg)
server.quit()
except Exception as e:
print(f"发送邮件失败: {e}")
# 使用
if __name__ == "__main__":
monitor = ProcessMonitor(threshold_cpu=70, threshold_mem=80)
monitor.generate_report()
实用技巧
获取特定用户进程
# Linux
ps aux | grep "^username"
# Python
import psutil
users = psutil.users()
for user in users:
print(user.name)
端口与进程关联
# 查看谁在使用80端口 lsof -i :80 netstat -tulpn | grep 80
定期记录
# Cron任务定期记录进程信息 */5 * * * * /path/to/your_script.sh >> /var/log/process.log
这些脚本覆盖了大部分常见的进程信息获取需求,根据你的具体场景选择合适的方案,如果需要特定功能,我可以帮你完善。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播