
Description
Port 8080 is taken again and the service just errors out. The usual dance is lsof -i :8080 for a PID, then ps to see what that PID is, and if it runs under systemd or Docker you keep digging — three or four commands to learn who it is. portop folds that into one screen: an htop-style terminal UI where each port shows the owning process, the systemd unit and the Docker container on one line, and one keypress kills it, opens it in the browser, or shows its details.
It answers what ss, netstat and lsof only half-answer — not just what is bound to a port, but who is using it. The table refreshes live and is colour-coded: LISTEN green, ESTABLISHED blue, a just-opened port marked amber; :22 shows as ssh and :443 as https, parsed from /etc/services. The systemd unit and Docker container are resolved from cgroups — no D-Bus, no Docker SDK, no extra daemon. When you act: k then y for SIGTERM or f for SIGKILL, always with confirmation so you never kill the wrong thing on a stray key; o opens localhost:PORT in the browser; f then typing filters by port, process name or PID as you go. A single Go binary, MIT-licensed.
Port to process on one screen: each row shows port, protocol, state, process, CPU% and the remote address, and resolves the owning systemd unit and Docker container, so there is no lsof-then-ps.
systemd and Docker aware: ownership is resolved from cgroups without D-Bus, a Docker SDK or an extra daemon, so it recognizes containers and services out of the box.
One-key actions: k then y (SIGTERM) or f (SIGKILL) kill with confirmation, o opens the port in the browser, and c copies the selected row.
Live filter and colour: typing filters by port, process name or PID; LISTEN, ESTABLISHED and just-opened are colour-coded, and well-known ports show as ssh or https from /etc/services.
Process detail and adaptivity: view cmdline, executable, cwd, user, RSS, thread count and start time; as the terminal narrows it drops the least useful columns first so rows never wrap, down to 80 columns.
It answers what ss, netstat and lsof only half-answer — not just what is bound to a port, but who is using it. The table refreshes live and is colour-coded: LISTEN green, ESTABLISHED blue, a just-opened port marked amber; :22 shows as ssh and :443 as https, parsed from /etc/services. The systemd unit and Docker container are resolved from cgroups — no D-Bus, no Docker SDK, no extra daemon. When you act: k then y for SIGTERM or f for SIGKILL, always with confirmation so you never kill the wrong thing on a stray key; o opens localhost:PORT in the browser; f then typing filters by port, process name or PID as you go. A single Go binary, MIT-licensed.
Features
Port to process on one screen: each row shows port, protocol, state, process, CPU% and the remote address, and resolves the owning systemd unit and Docker container, so there is no lsof-then-ps.
systemd and Docker aware: ownership is resolved from cgroups without D-Bus, a Docker SDK or an extra daemon, so it recognizes containers and services out of the box.
One-key actions: k then y (SIGTERM) or f (SIGKILL) kill with confirmation, o opens the port in the browser, and c copies the selected row.
Live filter and colour: typing filters by port, process name or PID; LISTEN, ESTABLISHED and just-opened are colour-coded, and well-known ports show as ssh or https from /etc/services.
Process detail and adaptivity: view cmdline, executable, cwd, user, RSS, thread count and start time; as the terminal narrows it drops the least useful columns first so rows never wrap, down to 80 columns.

