JobObject2010/12/07 03:59

雲は、最近何故か、プロセスにはまっています。数値計算がルーツの雲は、高速化に興味があってこれまでは、スレッド!一筋でしたが徐々にプロセスに興味が移行していて気がつくとプロセスの方が好きになっています。え?今更プロセスって?そうです。プロセスなら、途中で終了してもリソースのリースなんか無いし、安全性はOSが保証してくれるので良いですよ。と、勝手なことを思っています。さて、複数のプロセスをまとめて管理するためのオブジェクトで、JobObject というものがあります。これ、意外と、便利です。例えば、子プロセスを親プロセスが終了する時に確実に終了させる。なんて時に使えます(UNIX的には、ゾンビプロセスがないようにできる。と言えば良いですか?)。ただ、Vista では、何故か、JOB にプロセスを割り当てる、AssignProcessToJobObjectでアクセス権が無い。と言って怒られていました。いろいろ、ネット上を徘徊してみたのですがなかなか情報が無く、とっても困っていましたが、何とか解決をしたので記録のために残しておきます。実のところ、WindowsVista以降では、起動されたプロセスは、PCA という名前(が最初につく)のJobに最初から所属している。ということが原因でした(プロセスは、一つのJobにしか所属できない)。で、どうするかと言えば、プロセスがJobに所属しない形で起動できればよい。ということで、マニフェストファイルを準備することになります。

アプリケーション マニフェスト

http://msdn.microsoft.com/ja-jp/library/dd371711(VS.85).aspx

Win7&2008R2: アプリケーション マニフェスト

http://togarasi.wordpress.com/2009/06/06/win72008r2-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3-%E3%83%9E%E3%83%8B%E3%83%95%E3%82%A7%E3%82%B9%E3%83%88/