signal method
Sets a function to handle a signal.
Returns the previous handler, or SIG_ERR on error.
Implementation
sighandler_t signal(int sig, sighandler_t func) {
final previousHandler = _signalHandlers[sig] ?? SIG_DFL;
if (func == SIG_ERR) return SIG_ERR;
// Cleanup old subscription
_signalSubscriptions[sig]?.cancel();
_signalSubscriptions.remove(sig);
_signalHandlers[sig] = func;
if (func == SIG_DFL) {
// Default behavior usually means terminating or ignoring depending on signal.
// In Dart we simply stop intercepting it.
stdlibSetSignalHandler(sig, null); // We need to handle null in stdlibSetSignalHandler or just not set
} else if (func == SIG_IGN) {
// Ignore it.
final sub = stdlibSetSignalHandler(sig, (_) {});
if (sub != null) _signalSubscriptions[sig] = sub;
} else {
// Custom handler
final sub = stdlibSetSignalHandler(sig, (s) => func(s));
if (sub != null) _signalSubscriptions[sig] = sub;
}
return previousHandler;
}