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