<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<title>procinsh / list</title>
<link rel="stylesheet" href="/style.css"><script src="/app.js" defer></script>
</head>
<body>
<header><a href="/list" id="brand">procinsh</a><a href="/list" id="back" class="view-link" hidden>Go to list view</a><a href="/space" class="view-link">Go to space view</a></header>
<main>
<div id="error" role="alert" hidden></div>
<section id="explorer">
<div class="toolbar"><input type="search" id="search" placeholder="Search name, PID, or command…" aria-label="Search processes"><label>Sort <select id="sort"><option value="cpu">CPU ↓</option><option value="rss">RSS ↓</option><option value="pid">PID ↑</option></select></label><span id="process-count" class="muted"></span></div>
<div class="panel scroll"><table><thead><tr><th>PID</th><th>USER</th><th>CPU</th><th>RSS</th><th>THREADS</th><th>STATE</th><th>NAME / COMMAND</th></tr></thead><tbody id="process-list"></tbody></table></div>
</section>
<section id="inspector" hidden>
<div class="heading inspector-heading"><div class="target-heading"><p class="eyebrow" id="identity"></p><h1 id="target-name"></h1><p class="muted command" id="command"></p></div><div class="capture-heading"><span class="badge" id="target-status"></span><div class="snapshot-controls"><label><input type="checkbox" role="switch" id="auto-snapshot" aria-describedby="capture-hint"> Capture snapshot continuously</label><button id="snapshot">Capture snapshot once</button><span class="muted" id="auto-snapshot-status" role="status" hidden></span><p class="muted" id="capture-hint">Every 1 s while enabled. Each capture briefly pauses all threads.</p></div></div></div>
<p id="target-error" class="notice" hidden></p>
<div id="metrics" class="metrics"></div>
<div class="panel history"><div class="panel-heading"><h2>CPU & memory history</h2><span class="muted">Last 60 seconds · CPU per core</span></div><canvas id="history" height="160" role="img" aria-label="CPU and RSS history over the last 60 seconds"></canvas><div class="legend"><span>● CPU</span><span>● RSS</span><span id="history-scale"></span></div></div>
<div class="inspector-grid">
<section class="panel"><div class="panel-heading"><h2>Threads</h2><span id="thread-count" class="muted"></span></div><div class="scroll thread-scroll"><table><thead><tr><th>TID / NAME</th><th>CPU %</th><th>CPU</th><th>STATE</th></tr></thead><tbody id="threads"></tbody></table></div><div id="thread-detail" class="detail muted"></div></section>
<section class="panel"><div class="panel-heading"><h2>Registers</h2></div><p class="muted detail" id="snapshot-time">Not captured</p><div class="scroll register-scroll"><table><tbody id="registers"></tbody></table></div></section>
<section class="panel call-stack-panel"><div class="panel-heading"><h2>Call Stack</h2><span id="stack-tid" class="muted">Frame pointer</span></div><div id="call-stack" class="stack"><p class="muted">Capture a snapshot to view the call stack.</p></div></section>
</div>
<section class="panel disassembly"><div class="panel-heading"><h2>Disassembly</h2><span class="muted" id="disasm-time">Snapshot · x86-64 / Intel</span></div><p class="muted detail" id="disasm-location">Capture a snapshot to view instructions starting at the selected thread’s RIP.</p><p class="muted detail">→ RIP marks the instruction at capture time. Instructions below are in address order, not execution history.</p><p class="notice detail" id="disasm-error" hidden></p><div class="scroll disasm-scroll"><table><thead><tr><th>POSITION</th><th>ADDRESS</th><th>BYTES</th><th>INSTRUCTION</th></tr></thead><tbody id="disassembly"></tbody></table></div></section>
<section class="panel maps"><div class="panel-heading"><h2>Memory Maps</h2><span class="muted" id="maps-info">Refresh every 5s</span></div><div class="scroll maps-scroll"><table><thead><tr><th>START / END</th><th>PERM</th><th>RSS</th><th>PSS</th><th>FILE OFFSET</th><th>OBJECT</th></tr></thead><tbody id="maps"></tbody></table></div></section>
<details class="panel process-detail" id="signals-panel"><summary>Signals</summary><div class="toolbar detail"><button id="signals-refresh">Refresh</button><span class="muted" id="signals-info" role="status">Not captured</span></div><p class="muted detail">Current state, read without pausing the process. Pending signals await delivery; blocked signals have delivery deferred. Ignored signals and registered handlers apply to the whole process. Delivery history and handler addresses are not included. RT uses kernel numbering, which may differ from libc SIGRTMIN.</p><p class="notice detail" id="signals-error" hidden></p><div class="scroll process-detail-scroll"><table><thead><tr><th>SCOPE / STATE</th><th>MASK</th><th>SIGNALS</th></tr></thead><tbody id="signals-entries"></tbody></table></div></details>
<details class="panel process-detail" id="fds-panel"><summary>Pipe / Socket · Peer processes</summary><div class="toolbar detail"><input type="search" id="fds-search" placeholder="Search FD, PID, protocol, address…" aria-label="Search pipe and socket"><button id="fds-refresh">Refresh</button><span class="muted" id="fds-info" role="status">Not captured</span></div><p class="muted detail">Click a PID to inspect a peer process. Peers and processes sharing the same FD resource are listed separately.</p><p class="muted detail">A point-in-time view without pausing the process. TCP/UDP peers are candidates based on reversed addresses and ports. Peers on remote hosts or in other network namespaces may be unidentified.</p><p class="notice detail" id="fds-error" hidden></p><p class="muted detail" id="fds-warnings" hidden></p><div class="scroll process-detail-scroll"><table><thead><tr><th>FD</th><th>TYPE / ACCESS</th><th>RESOURCE / ADDRESS</th><th>PEER PID / FD</th></tr></thead><tbody id="fds-entries"></tbody></table></div></details>
<details class="panel process-detail" id="environment-panel"><summary>Environment</summary><div class="toolbar detail"><input type="search" id="environment-search" placeholder="Search name or value…" aria-label="Search environment"><button id="environment-refresh">Refresh</button><span class="muted" id="environment-info" role="status">Not captured</span></div><p class="muted detail">Reads the environment area established at startup. Later changes made by setenv() or similar calls may not be fully reflected.</p><p class="notice detail" id="environment-error" hidden></p><div class="scroll process-detail-scroll"><table><thead><tr><th>NAME</th><th>VALUE</th></tr></thead><tbody id="environment-entries"></tbody></table></div></details>
<details class="panel process-detail" id="auxv-panel"><summary>Auxiliary Vector</summary><div class="toolbar detail"><button id="auxv-refresh">Refresh</button><span class="muted" id="auxv-info" role="status">Not captured</span></div><p class="muted detail">Values supplied by the kernel at exec time.</p><p class="notice detail" id="auxv-error" hidden></p><div class="scroll process-detail-scroll"><table><thead><tr><th>TYPE</th><th>HEX VALUE</th><th>DECIMAL</th><th>DESCRIPTION / STRING</th></tr></thead><tbody id="auxv-entries"></tbody></table></div></details>
</section>
</main>
</body>
</html>