How to capture different signals such as SIGINT
and SIGTERM
in Swift correctly? For example, when people stop my script by pressing Control-C, I want to do some cleanup before terminating it.
Dispatch Sources can be used to monitor UNIX signals.
Here is a simple example, a Swift 3 translation of the C code in the "Monitoring Signals" section from the Concurrency Programming Guide.
import Dispatch // or Foundation
signal(SIGINT, SIG_IGN) // // Make sure the signal does not terminate the application.
let sigintSrc = DispatchSource.makeSignalSource(signal: SIGINT, queue: .main)
sigintSrc.setEventHandler {
print("Got SIGINT")
// ...
exit(0)
}
sigintSrc.resume()
Note that this requires an active GCD event loop, e.g. with
dispatchMain()
in a command-line program.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With