diff --git a/internal/injector/injector.go b/internal/injector/injector.go index 371b303..612837e 100644 --- a/internal/injector/injector.go +++ b/internal/injector/injector.go @@ -8,6 +8,8 @@ import ( "syscall" ) +// signals is defined in signals_unix.go and signals_windows.go + // RunCommand executes a command with the provided secrets injected into the environment. // It handles signal forwarding and exit code propagation. func RunCommand(command string, args []string, secrets map[string]string) error { @@ -33,8 +35,7 @@ func RunCommand(command string, args []string, secrets map[string]string) error // Handle signals sigs := make(chan os.Signal, 1) - // Notify on all common signals - signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP) + signal.Notify(sigs, signals...) // Start the command if err := cmd.Start(); err != nil { diff --git a/internal/injector/signals_unix.go b/internal/injector/signals_unix.go new file mode 100644 index 0000000..5b4579f --- /dev/null +++ b/internal/injector/signals_unix.go @@ -0,0 +1,10 @@ +//go:build !windows + +package injector + +import ( + "os" + "syscall" +) + +var signals = []os.Signal{syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP} diff --git a/internal/injector/signals_windows.go b/internal/injector/signals_windows.go new file mode 100644 index 0000000..fccd23e --- /dev/null +++ b/internal/injector/signals_windows.go @@ -0,0 +1,14 @@ +//go:build windows + +package injector + +import ( + "os" + "syscall" +) + +// SIGTERM is included because signal.Notify delivers it on console shutdown events +// (CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT, CTRL_SHUTDOWN_EVENT). Note that forwarding +// SIGTERM to child processes via Process.Signal is not supported on Windows — +// the attempt will fail silently. +var signals = []os.Signal{syscall.SIGINT, syscall.SIGTERM}