在Swift命令行应用程序中捕获信号

时间:2017-08-16 12:40:53

标签: swift signals

如何正确捕获Swift中的SIGINTSIGTERM等不同信号?例如,当人们通过按 Control - C 来停止我的脚本时,我想在终止它之前进行一些清理。

1 个答案:

答案 0 :(得分:8)

Dispatch Sources 可用于监控UNIX信号。

这是一个简单的例子,一个Swift 3的C代码翻译 并发编程指南中的"Monitoring Signals"部分。

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()

请注意,这需要一个有效的GCD事件循环,例如:与

dispatchMain()

在命令行程序中。