[BUG] "Overriding existing handler for signal 30" warning on Linux startup — JSC_SIGNAL_FOR_GC workaround broken by Bun
Resolved 💬 3 comments Opened Mar 15, 2026 by robertmonka Closed Apr 13, 2026
Description
On Linux (WSL2, Ubuntu), every interactive Claude Code session prints this warning on startup:
Overriding existing handler for signal 30. Set JSC_SIGNAL_FOR_GC if you want WebKit to use a different signal
Signal 30 is SIGPWR on Linux. This comes from JavaScriptCore (JSC) in the Bun runtime when it registers a GC signal handler and finds an existing handler on that signal.
The workaround doesn't work
WebKit's official fix is to set JSC_SIGNAL_FOR_GC=<N> to redirect JSC to a different signal. However, Bun parses this environment variable as its own CLI option and rejects it:
$ export JSC_SIGNAL_FOR_GC=48
$ claude
ERROR: invalid option: JSC_SIGNAL_FOR_GC=48
Overriding existing handler for signal 48. Set JSC_SIGNAL_FOR_GC if you want WebKit to use a different signal
So the variable both fails to suppress the warning (it just moves it to a different signal number) AND produces an additional error line.
Impact
- Cosmetic only — Claude Code works correctly
- The warning appears on every interactive session start (not with
--versionor-pmode) - Cannot be suppressed by the user without filtering stderr
Environment
- Claude Code v2.1.76
- Linux 6.6.87.2-microsoft-standard-WSL2 (Ubuntu on WSL2)
- x86-64
Related issues
- webview/webview#585 — same WebKit warning in other projects
- oven-sh/bun#15925 — Bun FFI signal conflict
Expected behavior
No warning printed on startup. Either:
- Bun should properly support
JSC_SIGNAL_FOR_GCwithout treating it as a CLI flag, or - Claude Code should suppress this specific JSC warning from reaching the terminal
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗