[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 --version or -p mode)
  • 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

Expected behavior

No warning printed on startup. Either:

  1. Bun should properly support JSC_SIGNAL_FOR_GC without treating it as a CLI flag, or
  2. Claude Code should suppress this specific JSC warning from reaching the terminal

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗