一尘不染

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

swift

如何捕捉到不同的信号,如SIGINTSIGTERM斯威夫特是否正确?例如,当人们通过按Control-
停止我的脚本时C,我想在终止脚本之前进行一些清理。


阅读 228

收藏
2020-07-07

共1个答案

一尘不染

调度源
可用于监视UNIX信号。

这是一个简单的示例,
并发编程指南
》中“监视信号”
部分中C代码的Swift
3转换

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

在命令行程序中。

2020-07-07