get_running_processes
Retrieve running processes with resource usage and executable paths to analyze performance, troubleshoot resource issues, and conduct security audits.
Instructions
Get list of running processes with resource usage and executable paths.
Shows top processes by CPU/memory usage with PIDs, names, and executable paths. Essential for performance analysis, troubleshooting resource issues, and security auditing.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/sysinfo/server.py:172-189 (handler)MCP tool handler for get_running_processes. Wraps the collector function, formats output as ToolResult with markdown sections.@mcp.tool def get_running_processes() -> ToolResult: """Get list of running processes with resource usage and executable paths. Shows top processes by CPU/memory usage with PIDs, names, and executable paths. Essential for performance analysis, troubleshooting resource issues, and security auditing. """ info_sections = [] info_sections.append("# Running Processes") info_sections.append(f"*Generated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}*\n") try: from .collectors import get_running_processes as get_processes_data info_sections.extend(get_processes_data()) except Exception as e: info_sections.append(f"⚠️ **Process detection error**: {str(e)}") return text_response("\n".join(info_sections))
- src/sysinfo/collectors.py:817-882 (helper)Core helper function that iterates over processes using psutil, collects CPU/memory usage, sorts top processes, and formats as markdown table with summary.def get_running_processes() -> List[str]: """Get list of running processes with resource usage""" info = [] info.append("## ⚙️ Running Processes") try: # Get all processes and sort by CPU usage processes = [] for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_percent', 'exe', 'cmdline']): try: pinfo = proc.info if pinfo['name'] and pinfo['name'] != '': # Get CPU percent (this call triggers measurement) cpu_percent = proc.cpu_percent() pinfo['cpu_percent'] = cpu_percent processes.append(pinfo) except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): continue # Sort by CPU usage, then memory usage processes.sort(key=lambda x: (x.get('cpu_percent', 0), x.get('memory_percent', 0)), reverse=True) # Display top 20 processes info.append(f"\n### Top Processes (by CPU/Memory usage)") info.append("| PID | Name | CPU% | Memory% | Path |") info.append("|-----|------|------|---------|------|") count = 0 for proc in processes: if count >= 20: break pid = proc.get('pid', 'N/A') name = proc.get('name', 'Unknown')[:20] # Truncate long names cpu = proc.get('cpu_percent', 0) memory = proc.get('memory_percent', 0) # Get executable path exe_path = proc.get('exe', '') if not exe_path and proc.get('cmdline'): # Fallback to first command line argument cmdline = proc.get('cmdline', []) if cmdline: exe_path = cmdline[0] # Truncate path for display if exe_path: if len(exe_path) > 40: exe_path = "..." + exe_path[-37:] else: exe_path = "N/A" # Only show processes with some activity or important system processes if cpu > 0.1 or memory > 0.5 or name.lower() in ['kernel_task', 'systemd', 'init', 'launchd']: info.append(f"| {pid} | {name} | {cpu:.1f}% | {memory:.1f}% | {exe_path} |") count += 1 # Add process summary total_processes = len(processes) active_processes = len([p for p in processes if p.get('cpu_percent', 0) > 0]) info.append(f"\n**Summary**: {total_processes} total processes, {active_processes} active") except Exception as e: info.append(f"⚠️ **Error collecting process information**: {str(e)}") return info