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:你說得對。它爲我工作,因爲我的測試代碼已經導入基礎。 –