ページ

2009年11月10日火曜日

Snow Leopard - Sudden Termination

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

Snow Leopard から Sudden Termination(即時終了) が追加された。この仕組みを使うとシステム終了(シャットダウン)にかかる時間を短縮することができる。

Sudden Termination の仕組み

アプリケーション毎に Sudden Termination(即時終了)を有効・無効にすることができて、有効の場合はシャットダウン時にシステムが通常の終了手順をすっ飛ばしてそのアプリケーションを強制終了することができる。多くのアプリケーションが Sudden Termination を有効にしていれば、結果としてシャットダウン時間を短縮することができる。

Sudden Termination の有効・無効はアプリケーションが実行途中に変更することができる。例えば起動時は有効にしておいて、ファイルの書き込みなどが必要な場合は一旦無効にし、書き出しが終わったらまた有効にする、といった使い方もできる。

Sudden Termination は NSProcessInfo のメソッドで行う。
enableSuddenTermination
disableSuddenTermination

アプリケーション毎に Sudden Termination Counter というカウンタが用意されていて、上記メソッドを呼出すことでこのカウンタを増減させることができる。enableSuddenTermination を呼ぶとカウンタから1を減らし、disableSuddenTermination を呼ぶとカウントを1増やす。カウンタが0の時、そのアプリケーションはシステムに対して Sudden Termination を許可する。

このカウンタは起動時に 1(つまり即時終了は無効)となっているが Info.plist ファイルに NSSupportsSuddenTermination=YES を指定しておくと、起動直後からカウンタ0(Sudden Termination が有効)とすることができる。

いくつかの Application Kit のクラスでは Sudden Termination の制御を行っている。

  • NSUserDefaults - デフォルト値がディスクへ書き出される時に Sudden Termination を一時的に無効にする
  • NSDocument - ドキュメントに変更が加えられている場合、ディスクへ書き出される時に Sudden Termination を無効にする


参考情報:Mac Dev Center: NSProcessInfo Class Reference


こんな仕組みなのでアプリ開発者が積極的に協力して Sudden Termination を有効にしないと効果は無い。



なお Sudden Termination 有効のアプリに対しては SIGKILL シグナルが送られるようだ。


WIKIPEDIA の SIGKILL にも情報が出ていた。
SIGKILL - Wikipedia, the free encyclopedia
以下、引用。
To speed the computer shutdown procedure, Mac OS X 10.6, aka Snow Leopard, will send SIGKILL to applications that have marked themselves "clean" resulting in faster shutdown times with, presumably, no ill effects.[1]


アクティビティモニタで確認する

アプリケーション毎の Sudden Termination の有効・無効はアクティビティモニタで確認できる。標準では項目が出ていないので表示メニューで「即時終了」を表示させる。

アプリ毎に状態が表示される。

試しにテキストエディタを立ち上げてみる。初期状態は即時終了が「はい」となっている。


新規にテキストを作成すると、即時終了が「いいえ」となった。


テキストを保存してしばらくすると即時終了がまた「はい」となった。

テキストエディタは NSDocument を使った典型的なアプリケーションと思われるのでドキュメントに書かれていたような動きになるのだろう。


参考情報

Mac OS X Developer Release Note
Sudden Termination - Fast Killing Of Applications (Updated since November seed)
Snow Leopard のリリースノートに説明がある。

Sudden Termination - Drift Diary13
アクティビティモニタで確認できることはこのサイトで知った。

Mac Dev Center: Preference Pane Programming Guide: Updating Preference Panes for Snow Leopard and Beyond
Preferenece Pane のドキュメントだが Sudden Termiation についての説明がある。