Go公式WikiのSignal Handlingの日本語意訳になります。
(元記事の最終更新日: 2014/12/10 rev.2)
OSシグナルに関する簡単な説明がされています。
シグナル制御
はじめに
アプリケーション内部の状態を保存したり、終了前にクリーンアップ処理を行ったり、コンフィグファイルのリロードやメモリ・CPUプロファイル情報を書き込んだしりする必要がある場合があります。
UNIX系のOSでは、シグナルによってこれらの処理を達成することができます。
例
以下のコードは割り込みシグナルを待機して、シグナルを受け取った際には一時ファイル削除するプログラムになります。
package main
import (
"io/ioutil"
"os"
"os/signal"
)
func main() {
f, err := ioutil.TempFile("", "test")
if err != nil {
panic(err)
}
defer os.Remove(f.Name())
sig := make(chan os.Signal, 1)
signal.Notify(sig, os.Interrupt)
<-sig
}
// 訳注: 最後の `<-sig` で待機し続ける。
// もし kill -SIGINTやCtrl+C等でos.Interruptに対するシグナルを送信するとブロックが解除され次の行に進む。
// 次の行は無くmain関数の終わりなので、`defer os.Remove(f.Name())` が実行されて、一時ファイルが削除された後にプログラムが終了する。
//
comments powered by Disqus