プロセスのゾンビ化 ― 2008年02月27日 23時54分47秒
今仕事で.NETで作成したアプリケーションがゾンビ化してしまう不具合の対応をしています。このアプリはどんなアプリかというと以下の通りの動きをします。
- 起動すると複数のサブスレッドを実行します。
- サブスレッドはそれぞれが指定されたプロセスを実行します。
- サブスレッドの同時実行数はセマフォで管理します。
こんな感じです。ゾンビ化した際のログを調べてみると、サブスレッドで例外が発生したときにゾンビ化してしまうようです。検索したら以下のサイトが見つかりました。
http://blog.livedoor.jp/gushwell/archives/23509116.html
サブスレッドで発生した例外をメインスレッドで処理するにはAppDomain.CurrentDomain.UnhandledExceptionイベントを使わないといけないようです。今までこの処理方法はとっていなかったのでサブスレッドで発生した例外が処理されずにいたのがゾンビ化の原因ではないかと思われます。
やっぱりマルチスレッドプログラミングは難しいですね。