Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

macOS: setStableProcessTitle() runs every 5 s → one LaunchServices check-in per session every 5 s (launchservicesd CPU)

Aperta Adatta ai principianti
#1,000 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
74/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
javascript, macos, node.js
Ambito
cli, performance

Direzione di ricerca

Leggi il codice di writeTitle() e setStableProcessTitle() mostrato nell’issue, poi individua dove useTerminalTitle pianifica reassertTerminalTitle(). Verifica la riproduzione minima con Node su macOS per confermare che le assegnazioni ripetute attivano check-in. Il lavoro è completato quando il titolo del terminale può ancora essere riaffermato ogni 5 secondi senza assegnazioni ripetute del titolo del processo e la riproduzione non mostra check-in ricorrenti.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Summary

Since the fix for #764 (v1.50.1), the process title is stable (command-code) — thanks.
But writeTitle() calls setStableProcessTitle() on every call, and
useTerminalTitle re-asserts the terminal title every 5 s:

function setStableProcessTitle(){process.title="command-code"}
function writeTitle(e){setStableProcessTitle(),process.stderr.isTTY&&process.stderr.write(SN(e))}
function reassertTerminalTitle(){null!==wN&&writeTitle(wN)}
// useTerminalTitle:
const e=setInterval(reassertTerminalTitle,5e3)

On macOS, every process.title assignment goes through libuv's darwin
proctitle code, which checks the process in with LaunchServices. lsd logs
pid N registering self and the check-in is rejected with -10811
(kLSNotAnApplicationErr), but launchservicesd still does the work (code
signature validation) each time. So every interactive session costs one
LaunchServices check-in every 5 s, forever, idle or not, even though the
value never changes.

Impact (measured)

macOS 26.6 (25G72), Apple Silicon (M5 Max, 18 cores), Node v24.21.0 arm64,
Command Code 1.79.1, ~20–30 interactive sessions open in a terminal multiplexer:

  • 12 check-ins / min per session, constant (10-min idle window: 119–120 per session).
  • 45-min audit: launchservicesd was the #1 CPU consumer of the machine:
    353 % average, 433 % p95
    (≈3.5 cores); 84 of 87 registering self
    events per probe window came from Command Code processes.
  • Controlled experiment with throw-away sessions (--no-session, no prompt sent):
    baseline 257 % → +4 sessions 316 % → +8 sessions 362 % launchservicesd CPU
    (≈12–15 % of a core per session, ≈0.7 s of launchservicesd CPU per check-in).
    Those throw-away sessions ran Node x86_64 under Rosetta; arm64 sessions show
    the same 12 / min cadence.

Minimal repro (no Command Code needed)

node -e 'setInterval(()=>{process.title="command-code"},5000)' & A=$!   # rewrite every 5 s
node -e 'process.title="command-code"; setInterval(()=>{},5000)' & B=$!  # write once
sleep 42
log show --last 40s --style compact \
  --predicate 'process == "lsd" AND eventMessage CONTAINS "registering self"' > lsd.txt
grep -c "pid $A registering self" lsd.txt   # → 8
grep -c "pid $B registering self" lsd.txt   # → 0
kill $A $B

With Command Code itself: start one session in a terminal, then
log stream --predicate 'process == "lsd" AND eventMessage CONTAINS "registering self"'
shows its pid every 5.000 s.

Suggested fix

Only write the process title when it changes, e.g.

function setStableProcessTitle(){ if (process.title !== "command-code") process.title = "command-code" }

or call it once at startup instead of inside writeTitle(). The OSC terminal
title write can stay on the 5 s interval — it does not touch LaunchServices.

Local workaround (until a release)

A user mod in ~/.commandcode/mods/ that performs the native write once and
then backs process.title with a plain JS property removes the check-ins
(same loop: 8 → 0 per 40 s; ps still shows command-code). It only takes
effect after a session's first message (mods load with the harness).

Lingua principale
Nessun dato sulla lingua
Stelle
4.1k
Fork
363
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di CommandCodeAI/command-code

Tutte le issue di CommandCodeAI/command-code

Issue simili

Altre issue su CLI

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.