Process Management
Version Compatibility: XyPriss v6.0.0 and above
Overview
The Process Management API provides comprehensive access to system process information, enabling applications to monitor running processes, track resource consumption, and identify system bottlenecks.
API Reference
$processes(options?: ProcessOptions): ProcessInfo[] | ProcessInfo | ProcessStats
Retrieves process information with flexible filtering options.
Parameters:
options- (Optional) Filter and query options
Options:
interface ProcessOptions {
pid?: number; // Get specific process by PID
topCpu?: number; // Get top N processes by CPU usage
topMem?: number; // Get top N processes by memory usage
}
Returns:
ProcessInfo[]- Array of processes (default or with top filters)ProcessInfo- Single process (whenpidspecified)ProcessStats- Process statistics summary
Return Types
ProcessInfo
Detailed information about a single process.
interface ProcessInfo {
pid: number; // Process ID
name: string; // Process name
exe?: string; // Executable path
cmd: string[]; // Command line arguments
cpu_usage: number; // CPU usage percentage
memory: number; // Memory usage in bytes
virtual_memory: number; // Virtual memory in bytes
status: string; // Process status (Running, Sleeping, etc.)
start_time: number; // Start timestamp
run_time: number; // Runtime in seconds
parent_pid?: number; // Parent process ID
user_id?: string; // User ID running the process
disk_read: number; // Bytes read from disk
disk_write: number; // Bytes written to disk
}
ProcessStats
Aggregate statistics about all processes.
interface ProcessStats {
total_processes: number; // Total number of processes
running: number; // Number of running processes
sleeping: number; // Number of sleeping processes
stopped: number; // Number of stopped processes
zombie: number; // Number of zombie processes
}
Usage Examples
Get All Processes
const processes = __sys__.$processes() as ProcessInfo[];
console.log(`Total processes: ${processes.length}`);
processes.slice(0, 10).forEach((proc) => {
console.log(
`${proc.pid}: ${proc.name} (CPU: ${proc.cpu_usage.toFixed(1)}%)`
);
});
Find Top CPU Consumers
const topCpu = __sys__.$processes({ topCpu: 5 }) as ProcessInfo[];
console.log("=== Top 5 CPU Consumers ===");
topCpu.forEach((proc, index) => {
console.log(`${index + 1}. ${proc.name}`);
console.log(` PID: ${proc.pid}`);
console.log(` CPU: ${proc.cpu_usage.toFixed(2)}%`);
console.log(` Memory: ${(proc.memory / 1024 ** 2).toFixed(2)} MB`);
});
Find Top Memory Consumers
const topMem = __sys__.$processes({ topMem: 5 }) as ProcessInfo[];
console.log("=== Top 5 Memory Consumers ===");
topMem.forEach((proc, index) => {
const memoryMB = proc.memory / 1024 ** 2;
console.log(`${index + 1}. ${proc.name}: ${memoryMB.toFixed(2)} MB`);
});
Get Specific Process
const currentPid = process.pid;
const currentProc = __sys__.$processes({ pid: currentPid }) as ProcessInfo;
if (currentProc) {
console.log("Current Process Info:");
console.log(` Name: ${currentProc.name}`);
console.log(` PID: ${currentProc.pid}`);
console.log(` CPU: ${currentProc.cpu_usage.toFixed(2)}%`);
console.log(` Memory: ${(currentProc.memory / 1024 ** 2).toFixed(2)} MB`);
console.log(` Runtime: ${currentProc.run_time} seconds`);
}
Common Patterns
Process Monitoring
class ProcessMonitor {
private pid: number;
private thresholds = {
cpu: 80, // 80% CPU
memory: 1024, // 1GB memory
};
constructor(pid: number) {
this.pid = pid;
}
check(): void {
const proc = __sys__.$processes({ pid: this.pid }) as ProcessInfo;
if (!proc) {
console.error(`Process ${this.pid} not found`);
return;
}
if (proc.cpu_usage > this.thresholds.cpu) {
console.warn(`High CPU usage: ${proc.cpu_usage.toFixed(1)}%`);
}
const memoryMB = proc.memory / 1024 ** 2;
if (memoryMB > this.thresholds.memory) {
console.warn(`High memory usage: ${memoryMB.toFixed(2)} MB`);
}
}
}
const monitor = new ProcessMonitor(process.pid);
setInterval(() => monitor.check(), 5000);
Find Processes by Name
function findProcessesByName(name: string): ProcessInfo[] {
const allProcesses = __sys__.$processes() as ProcessInfo[];
return allProcesses.filter((proc) =>
proc.name.toLowerCase().includes(name.toLowerCase())
);
}
const nodeProcesses = findProcessesByName("node");
console.log(`Found ${nodeProcesses.length} Node.js processes`);
Resource Usage Report
function generateResourceReport(): string {
const topCpu = __sys__.$processes({ topCpu: 3 }) as ProcessInfo[];
const topMem = __sys__.$processes({ topMem: 3 }) as ProcessInfo[];
let report = "=== System Resource Usage ===\n\n";
report += "Top CPU Consumers:\n";
topCpu.forEach((proc, i) => {
report += ` ${i + 1}. ${proc.name} (${proc.cpu_usage.toFixed(1)}%)\n`;
});
report += "\nTop Memory Consumers:\n";
topMem.forEach((proc, i) => {
const mb = (proc.memory / 1024 ** 2).toFixed(2);
report += ` ${i + 1}. ${proc.name} (${mb} MB)\n`;
});
return report;
}
console.log(generateResourceReport());
Detect Resource Hogs
interface ResourceHog {
process: ProcessInfo;
reason: string;
}
function detectResourceHogs(): ResourceHog[] {
const processes = __sys__.$processes() as ProcessInfo[];
const hogs: ResourceHog[] = [];
processes.forEach((proc) => {
// High CPU usage
if (proc.cpu_usage > 75) {
hogs.push({
process: proc,
reason: `High CPU usage: ${proc.cpu_usage.toFixed(1)}%`,
});
}
// High memory usage (>1GB)
if (proc.memory > 1024 ** 3) {
hogs.push({
process: proc,
reason: `High memory usage: ${(proc.memory / 1024 ** 3).toFixed(
2
)} GB`,
});
}
// High disk I/O (>100MB)
const totalIO = proc.disk_read + proc.disk_write;
if (totalIO > 100 * 1024 ** 2) {
hogs.push({
process: proc,
reason: `High disk I/O: ${(totalIO / 1024 ** 2).toFixed(2)} MB`,
});
}
});
return hogs;
}
const hogs = detectResourceHogs();
if (hogs.length > 0) {
console.warn(`Found ${hogs.length} resource hogs:`);
hogs.forEach((hog) => {
console.warn(
` ${hog.process.name} (PID ${hog.process.pid}): ${hog.reason}`
);
});
}
Process Tree Analysis
interface ProcessTree {
process: ProcessInfo;
children: ProcessTree[];
}
function buildProcessTree(rootPid: number): ProcessTree | null {
const allProcesses = __sys__.$processes() as ProcessInfo[];
const root = allProcesses.find((p) => p.pid === rootPid);
if (!root) return null;
const children = allProcesses
.filter((p) => p.parent_pid === rootPid)
.map((child) => buildProcessTree(child.pid))
.filter((tree): tree is ProcessTree => tree !== null);
return { process: root, children };
}
function printProcessTree(tree: ProcessTree, indent: string = ""): void {
console.log(`${indent}${tree.process.name} (${tree.process.pid})`);
tree.children.forEach((child) => {
printProcessTree(child, indent + " ");
});
}
const tree = buildProcessTree(process.pid);
if (tree) {
printProcessTree(tree);
}
Long-Running Process Detection
function findLongRunningProcesses(minHours: number = 24): ProcessInfo[] {
const processes = __sys__.$processes() as ProcessInfo[];
const minSeconds = minHours * 3600;
return processes.filter((proc) => proc.run_time > minSeconds);
}
const longRunning = findLongRunningProcesses(48);
console.log(`Processes running for more than 48 hours: ${longRunning.length}`);
longRunning.forEach((proc) => {
const hours = (proc.run_time / 3600).toFixed(1);
console.log(` ${proc.name} (${hours}h)`);
});
Best Practices
1. Cache Process Lists
class ProcessCache {
private cache: ProcessInfo[] = [];
private lastUpdate = 0;
private ttl = 5000; // 5 seconds
getProcesses(): ProcessInfo[] {
const now = Date.now();
if (now - this.lastUpdate > this.ttl) {
this.cache = __sys__.$processes() as ProcessInfo[];
this.lastUpdate = now;
}
return this.cache;
}
}
const cache = new ProcessCache();
const processes = cache.getProcesses(); // Uses cache if recent
2. Filter Early
// Good: Use built-in filters
const topCpu = __sys__.$processes({ topCpu: 10 }) as ProcessInfo[];
// Avoid: Getting all processes then filtering
const all = __sys__.$processes() as ProcessInfo[];
const filtered = all.sort((a, b) => b.cpu_usage - a.cpu_usage).slice(0, 10);
3. Handle Missing Processes
function getProcessSafely(pid: number): ProcessInfo | null {
try {
const proc = __sys__.$processes({ pid }) as ProcessInfo;
return proc || null;
} catch (error) {
console.warn(`Process ${pid} not found or inaccessible`);
return null;
}
}
4. Aggregate Statistics
function getProcessStatistics(): {
total: number;
totalCpu: number;
totalMemory: number;
avgCpu: number;
avgMemory: number;
} {
const processes = __sys__.$processes() as ProcessInfo[];
const totalCpu = processes.reduce((sum, p) => sum + p.cpu_usage, 0);
const totalMemory = processes.reduce((sum, p) => sum + p.memory, 0);
return {
total: processes.length,
totalCpu,
totalMemory,
avgCpu: totalCpu / processes.length,
avgMemory: totalMemory / processes.length,
};
}
5. Monitor Critical Processes
const criticalProcesses = ["nginx", "postgres", "redis"];
function checkCriticalProcesses(): void {
const allProcesses = __sys__.$processes() as ProcessInfo[];
criticalProcesses.forEach((name) => {
const found = allProcesses.some((p) =>
p.name.toLowerCase().includes(name.toLowerCase())
);
if (!found) {
console.error(`Critical process not running: ${name}`);
}
});
}
setInterval(checkCriticalProcesses, 30000);
Platform Considerations
Linux
- Full process information available
- Accurate CPU and memory metrics
- Complete disk I/O statistics
macOS
- Full process information available
- Accurate metrics
- Some fields may be unavailable for system processes
Windows
- Full process information available
- Process names may differ from Unix systems
- User ID format differs
Performance Impact
Process querying operations:
- All Processes: ~10-50ms (depends on process count)
- Top N Processes: ~10-50ms (sorted at native level)
- Single Process: ~1-5ms
- Memory Overhead: ~1KB per process
Troubleshooting
Process Not Found
const proc = __sys__.$processes({ pid: 12345 }) as ProcessInfo;
if (!proc) {
console.error(
"Process not found - may have terminated or insufficient permissions"
);
}
Permission Denied
// Some process information may require elevated privileges
try {
const processes = __sys__.$processes() as ProcessInfo[];
console.log(`Found ${processes.length} accessible processes`);
} catch (error) {
console.error("Insufficient permissions to query processes");
}
Related Documentation
Version: XyPriss v6.0.0+
Last Updated: 2026-01-12