Skip to content

signal

The signal package runs your code when the process receives SIGINT (Ctrl+C), SIGTERM or SIGHUP. Handlers run on a background task.

signal::trap(signal::SIGINT, with () do
println "Shutting down..."
exit 0
end)
println "Running. Press Ctrl+C to stop."
while true do
task::sleep(100)
end

Registering a handler replaces the default behavior for that signal: after trapping SIGINT, Ctrl+C no longer stops the program unless the handler calls exit.

FunctionDoes
trap(signal, handler)Runs handler when the signal arrives.
reset(signal)Removes the handler and restores the default behavior.
trapped(signal)Whether a handler is registered.
raise_signal(signal)Runs the handler as if the signal had arrived; useful in tests.
signal::trap(signal::SIGHUP, with () do
println "reloading configuration"
end)
signal::raise_signal(signal::SIGHUP)
task::sleep(100) # give the background handler time to run
println signal::trapped(signal::SIGHUP) # true
signal::reset(signal::SIGHUP)

signal is unavailable in safe mode. On Windows only SIGINT is delivered.

NameValueDescription
signal::SIGINT"SIGINT"
signal::SIGTERM"SIGTERM"
signal::SIGHUP"SIGHUP"
signal::trap(sig, handler)

Registers a signal handler. The callback runs asynchronously in a background task.

ParameterTypeDefaultDescription
sigstringSignal name (e.g., signal::SIGINT, "SIGTERM").
handlerlambdaZero-argument lambda invoked when the signal fires.
import signal
signal::trap(signal::SIGINT, fn()
println "Shutting down..."
exit(0)
end)
println "Running. Press Ctrl+C to stop."
while true do
task::sleep(100)
end
signal::reset(sig)

Removes a signal handler.

ParameterTypeDefaultDescription
sigstringSignal name.
signal::trapped(sig)

Returns true if a signal handler is registered for the given signal.

ParameterTypeDefaultDescription
sigstringSignal name.

Returns boolean

signal::raise_signal(sig)

Programmatically fires a signal (useful for testing handlers).

ParameterTypeDefaultDescription
sigstringSignal name.