git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commit3db4ef04d5aebdc3d9ad89dc2198d50e4ca6e30d
parent71fdd8820e
authorLucas Galante <[email protected]>
date2026-09-02 12:19
docs: pkill -x cannot match cce binary names over 15 chars

pgrep/pkill without -f match the kernel comm name, truncated to 15
characters, so 'pkill -x cce-status-interface' silently matches nothing
— a kill-then-relaunch built on it doubled the status bar (the un-killed
launcher daemon holds no Wayland connection, so it even survives
logout). Restart non-service apps by explicit pid, confirmed via the
process's cgroup.

Co-Authored-By: Claude Fable 5 <[email protected]>

 WORKSPACE.md | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/WORKSPACE.md b/WORKSPACE.md
index b591b6b..1b6de67 100644
--- a/WORKSPACE.md
+++ b/WORKSPACE.md
@@ -313,8 +313,14 @@ the others. The rules:
   `ccebuild restart` is unscoped: it restarts every user service running a
   replaced binary, including apps another session has installed but is not
   ready to restart. The per-crate form restarts only units shipped by the
-  named crate(s). Apps that are not services restart by name
-  (`pkill -x <bin>`, relaunch detached).
+  named crate(s). Apps that are not services restart by pid, not name:
+  `pkill -x` matches the kernel comm name, which is truncated to 15
+  characters, so it silently matches NOTHING for most `cce-*` binary
+  names ("cce-status-interface" is 20) — a "kill then relaunch" built on
+  it relaunches beside the survivor and doubles the app. Find the pid
+  with `ps -eo pid,ppid,cmd`, confirm it is yours via
+  `/proc/<pid>/cgroup` (a unit's processes name their unit), `kill` it
+  explicitly, then relaunch detached.
 - **Shared crates are exclusive.** Before editing `cce-ui`,
   `cce-window-manager`, or `cce-icons`, run `git status` there. Foreign dirt
   means another session owns that crate right now — coordinate or stop; don't