Elegante Behandlung der Beendigung von Kindprozessen in Terminalanwendungen

2025-07-31
Elegante Behandlung der Beendigung von Kindprozessen in Terminalanwendungen

Wenn eine Terminalanwendung mit Kindprozessen nach Strg+C nicht sauber beendet wird, kommt es zu einer Terminalbeschädigung. Dieser Beitrag beschreibt anhand des Beispiels der Moose-CLI Lösungen. Wichtige Strategien sind: 1. Prozessausgabe-Proxy: Umleitung von stdout/stderr des Kindprozesses an ein Protokollierungssystem, um ihn vom Terminal zu isolieren; 2. Terminalzustandsverwaltung: Explizite Bereinigung des Terminalzustands (Rohmodus, alternativer Bildschirm-Buffer, Cursorsichtbarkeit) mit crossterm für plattformübergreifende Konsistenz beim Beenden; 3. Genaue Prozessbeendigung: Versuch eines sauberen Abschaltens mit SIGTERM, dann SIGKILL mit Timeouts; 4. Thread-sichere Spinner-Verwaltung: Koordination von Spinners und Kindprozessausgabe, um Anzeigefehler zu vermeiden. Diese Strategien führen zu robusten Terminalanwendungen und vermeiden frustrierende Terminalbeschädigungen durch Kindprozesse.

Entwicklung Kindprozesse