問題

SwiftでSIGINTSIGTERMなどの異なる信号を正しくキャプチャする方法は?たとえば、Control-Cを押してスクリプトを停止すると、終了する前にクリーンアップを行いたいと思います。

  ベストアンサー

ディスパッチソース UNIX のシグナルを監視するために使用できます。

ここに簡単な例があります。Swift 3のCコードの翻訳 Concurrency Programming Guideの "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()
 

コマンドラインプログラムで。

  同じタグがついた質問を見る

swiftsignals