2
如何正确捕获Swift中的不同信号,如SIGINT
和SIGTERM
?例如,当人们通过按控制 - C停止我的脚本时,我想在终止它之前做一些清理。捕获Swift命令行应用程序中的信号
如何正确捕获Swift中的不同信号,如SIGINT
和SIGTERM
?例如,当人们通过按控制 - C停止我的脚本时,我想在终止它之前做一些清理。捕获Swift命令行应用程序中的信号
Dispatch Sources 可用于监视UNIX信号。
下面是一个简单的例子,在从并发编程指南的 "Monitoring Signals"部C代码的夫特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()
在命令行程序中。
记得要'进口调度! – paper1111
@ paper1111:你说得对。它为我工作,因为我的测试代码已经导入基础。 –