(57)【特許請求の範囲】
【請求項１】
プロセスのロード対象となるロード対象ファイルに対して、当該プロセス終了の際に実行する復旧処理が記述された復旧コマンドファイルを配置した位置情報を含む復旧処理情報を記述して記憶しておき、
プロセス終了を検出した場合に、当該プロセスにロードされていた前記ロード対象ファイルを全て取得し、
取得した前記ロード対象ファイル内の前記位置情報を参照して前記復旧コマンドファイルを全て取得し、
取得した前記復旧コマンドファイルをロードして前記復旧処理を実行する、プロセス異常復旧方法。
【請求項２】
前記復旧処理情報内には、どの順序で前記復旧コマンドファイルをロードして実行するかを示す実行順情報が設定されており、
プロセス終了検出の際、複数の前記復旧コマンドファイルが取得された場合に、前記実行順情報の順序で復旧処理を実行することを特徴とする請求項１に記載のプロセス異常復旧方法。
【請求項３】
前記復旧処理情報内に、前記プロセスの終了状態の種別である終了種別条件と、前記復旧コマンドファイルの位置情報を関連付けて記述し、
前記プロセス終了検出において、当該プロセスの終了状態を検出し、
検出した前記終了状態の種別と、前記終了種別条件と、が一致した場合に、前記復旧コマンドファイルを取得することを特徴とする請求項１または請求項２に記載のプロセス異常復旧方法。
【請求項４】
前記位置情報は、ファイルシステム上のファイルパス名で記述することを特徴とする請求項１乃至請求項３のいずれか１項に記載のプロセス異常復旧方法。
【請求項５】
前記プロセス終了の検出処理はプロセス状態を監視する監視プロセスにより実行されることを特徴とする請求項１乃至請求項４のいずれか１項に記載のプロセス異常復旧方法。
【請求項６】
プロセスのロード対象となるロード対象ファイルと、
プロセスの終了の際に、終了にかかる前記プロセスに関する処理を行う復旧処理実行部と、を備え、
前記ロード対象ファイルは、当該ファイルをロードしたプロセスが終了した際に実行する復旧処理が記述された復旧コマンドファイルを配置した位置情報、を含む復旧処理情報を有し、
前記復旧処理実行部は、プロセスの終了を検出した場合に、終了したプロセスにロードされていた前記ロード対象ファイルを全て取得し、
取得した前記ロード対象ファイル内の前記位置情報を参照して前記復旧コマンドファイルを全て取得し、
取得した前記復旧コマンドファイルをロードして前記復旧処理を実行する、プロセス異常復旧装置。
【請求項７】
前記ロード対象ファイルは、前記復旧処理情報内に、複数の前記復旧コマンドファイルが取得された場合に、どの順序で前記復旧コマンドファイルをロードして実行するかを示す実行順情報を有し、
前記復旧処理実行部は、プロセス終了検出時に、前記実行順情報の順序で復旧処理を実行することを特徴とする請求項６に記載のプロセス異常復旧装置。
【請求項８】
前記ロード対象ファイルは、前記復旧処理情報内に、前記プロセスの終了状態の種別である終了種別条件と、前記復旧処理とを関連付けた情報を有し、
前記復旧処理実行部は、前記プロセス終了検出において、当該プロセスの終了状態を検出し、
検出した前記終了状態の種別と、前記終了種別条件と、が一致した場合に、前記終了種別条件と関連付けられた前記復旧コマンドファイルのみを取得することを特徴とする請求項６または請求項７に記載のプロセス異常復旧装置。
【請求項９】
前記位置情報は、ファイルシステム上のファイルパス名で記載することを特徴とする請求項６乃至請求項８のいずれか１項に記載のプロセス異常復旧装置。
【請求項１０】
前記復旧処理実行部は、オペレーティングシステムのカーネル部に設けられたことを特徴とする請求項６乃至請求項９のいずれか１項に記載のプロセス異常復旧装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプロセス異常復旧装置及びプロセス異常復旧方法に関する。
【背景技術】
【０００２】
近年では、高速化や拡張性向上を目的として複数のプロセスによりシステムを稼働させることが多い。この場合において、複数のプロセスがファイルやメモリを共有して使用することがある（以後の説明では複数のプロセスにおいて共有されうるファイル、メモリ等を共有リソースと記載する。）。
【０００３】
大規模なシステム等は連続稼働が要求されることが多い。連続稼働が必要なシステムでは、あるプロセスが異常終了した場合に速やか、かつ、正確にシステムが提供していたサービスを再開することが要求される。ここで、異常終了したプロセスが共有リソースを使用していた場合、当該プロセスが当該共有リソースの値を不正な状態に書き換えていた恐れがある。そのためプロセスの異常終了時には、異常終了したプロセスが使用していた共有リソースを復旧してから当該プロセスを再起動する必要がある。共有リソースの復旧の後に、プロセスの再起動を行うことにより正常なシステム動作が再開される。
【０００４】
共有リソースの復旧を含むプロセスの再起動の方法としては、主に以下の二つの方法がある。第一の方法は、異常終了したプロセスが復旧後に共有リソースにアクセスする場合、当該共有リソースに対するアクセス実行をする前に当該共有リソースの整合性を確認し、問題がないことを確認してからアクセス処理を行うという方法である。しかし当該方法では、共有リソースにアクセスするたびに整合性チェックを行う必要があるため、性能が劣化する恐れがある。
【０００５】
第二の方法は、プロセスの動作状況を監視する監視プロセスを用意し、監視プロセスが監視対象プロセスの異常終了を検出した場合、異常終了したプロセスが使用していた共有リソースの内容を修復するという方法である。しかしこの方法では、共有ライブラリが共有リソースを使用していた場合に問題が生じる。共有ライブラリファイルは複数のプロセスにおいて共通する処理を記載したファイルであり、共有ライブラリファイルは共有ライブラリにロードされる。すなわち、共有ライブラリは、各プロセスで共通する処理を行う処理主体である。
【０００６】
複数のプロセスが共有ライブラリを使用し、その共有ライブラリが共有リソースを使用する場合、プロセスの異常終了時に共有リソースを復旧するために、共有ライブラリを使用する複数のプロセス全てを監視対象とする必要がある。すなわち、各プロセスが共有ライブラリを介して共有リソースを使用する恐れがあるため、全てのプロセスを監視しなければならない。またそれらの複数のプロセスに対応する復旧処理を実装する必要がある。この場合、実装すべき復旧処理は共有ライブラリによる共有リソースの使用にかかるものであるにもかかわらず、共有ライブラリを使用するプログラム各々において復旧処理を実装する必要がある。そのため、実装の手間が大きい。
【０００７】
また、上述の二つの方法では、共有リソースの復旧処理をメモリ上またはプロセスにロードする必要がある。そのため、システム改編等に応じて、プロセス異常終了時の復旧処理の内容を変更する必要がある場合に、一旦システムを停止したうえで、処理内容の変更を行う。その後に、変更を反映した復旧処理を再度メモリ上またはプロセスにロードする必要がある。このため、常時稼働が求められるシステムでは、上記の２つの方法を適用することが困難である。
【０００８】
さらに、当該技術に関連する文献として以下のものが挙げられる。
【０００９】
特開2000-311099（特許文献１）公報には、名前が設定された任意のプロセスに対して復旧処理を設定し、プロセスの異常終了時に当該プロセスに設定された処理を実行するプロセス監視システムが開示されている。当該プロセス監視システムは、図１２に示すような監視プロセス定義ファイルを保持する。監視プロセス定義ファイルには、プロセス名と、終了コードと、連動処理とが記述される。当該プロセス監視システムは、プロセス異常終了時に検出されたプロセス名とプロセス終了時の終了コードとを取得し、監視プロセス定義ファイルを検索して連動処理を取得し、当該連動処理を実行する。当該連動処理内には共有リソースの復旧処理等を記述する。連動処理内に共有リソースの復旧処理が記載されていることにより、プロセスの異常終了時に共有リソースの復旧処理が実行される。
【００１０】
特開平11-110258（特許文献２）公報には、プロセスの異常終了等により発行されたエラーメッセージを解析し、解析結果を用いてエラー状態を復旧するエラー診断装置が開示されている。当該エラー診断装置には、予めシステム復旧を要するエラーを認識するためのエラーメッセージと、その復旧コマンドが登録されている。エラー発生時には、エラー診断装置はエラーメッセージを解析し、エラーメッセージに対応づけられた復旧コマンドを実行する。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２０００−３１１０９９号公報
【特許文献２】特開平１１−１１０２５８号公報
【特許文献３】特開平１１−３２７９１３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかしながら、上述の特許文献に記載の技術にも以下の問題点がある。特許文献１に記載のプロセス監視システムでは、プロセス名に対応づけて連動処理を設定している。一般にオペレーティングシステム上で動作するプロセスの名前は、ロードした実行ファイル名と同じとなることが多い。しかし異なる処理を実行するための複数の実行ファイルに対して同じ名前を付けてシステム上に配置した場合、異なる処理を実行し、かつ同じ名前を持つ複数のプロセスが存在することになる。また、プロセスの動作中にプロセス名を変更できるオペレーティングシステムも存在する。この場合、実行中の一方のプロセスのプロセス名に合わせるように、他方のプロセスのプロセス名を変更することが可能である。
【００１３】
つまり、異なる処理を実行するプロセスであるにもかかわらず、同じプロセス名を持つプロセスがシステム上に複数存在する可能性がある。言い換えると、プロセス名によってプロセスを識別することができない。この場合、プロセス異常終了時にプロセス名をキーとして監視プロセス定義ファイルから連動処理の検索を行ったとしても、複数の連動処理が検索結果として得られる可能性がある。これにより、異常終了したプロセスに対応する連動処理とは異なる連動処理も検索結果として取得され、当該連動処理が行われてしまう恐れがある。すなわち、プロセス異常終了時に適切な連動処理が行われない恐れがある。
【００１４】
また特許文献１に記載のプロセス監視システムでは、共有ライブラリに対する考慮が不十分である。実行ファイルをロードしたプロセスは、複数のプロセス間で共通する処理を使用するために、共有ライブラリファイルをロードした共有ライブラリとリンクする。共有ライブラリが共有リソースを使用する場合、あるプロセスが異常終了した際に当該共有リソースの復旧処理が必要になることがある。これは、共有ライブラリにおいて共有リソースを更新している最中に、共有ライブラリとリンクしているプロセスが異常終了した場合、共有ライブラリの処理も中断されることにより、共有リソースが異常値となる可能性があるためである。ここで、共有ライブラリとリンクしたプロセスが複数存在する場合、その全てのプロセスに対する連動処理を監視プロセス定義ファイルに定義して、当該共有リソースの復旧処理を行う必要がある。このため、連動処理を監視プロセス定義ファイルに定義する作業が煩雑となる。
【００１５】
特許文献２に記載のエラー診断装置では、エラーメッセージに基づいてエラーの復旧処理が行われる。当該エラーメッセージにはエラー内容と、エラーを引き起こしたプロセスが記述されうる。ここで、異常終了したプロセスがリンクしていた共有ライブラリに対して他のプロセスもリンクしていた場合、当該他のプロセスに関する復旧処理を行う必要がある。これは、当該他のプロセスが共有ライブラリを介して共有リソースを使用している可能性があり、当該使用を中断する等の復旧処理を行う必要があるためである。しかし、エラーメッセージには異常終了したプロセスの情報しか含まれないため、当該他のプロセスに対する復旧処理を行うことができない。これにより、プロセス異常終了時に適切な復旧処理が行われない恐れがある。
【００１６】
すなわち、特許文献１及び２に記載の技術によっては、プロセスの異常終了時に共有リソースの復旧も含めたプロセスの復旧処理が正常に行われない恐れがある。
【００１７】
本発明はこのような問題点を解決するためになされたものであり、プロセスの異常終了の際に共有リソースの復旧も含めたプロセスの復旧処理が正常に行うことができ、当該復旧処理に関する設定も簡易なプロセス異常復旧装置及びプロセス異常復旧方法を提供することを目的とする。
【課題を解決するための手段】
【００１８】
本発明にかかるプロセス異常復旧装置の一態様は、プロセスのロード対象となるロード対象ファイルと、プロセスの終了時に終了にかかる前記プロセスにかかる処理を行う復旧処理実行部と、を備え、前記ロード対象ファイルは、プロセス終了時に実行する復旧処理が記述された復旧コマンドファイルを配置した位置情報を含む復旧処理情報を有し、
前記復旧処理実行部は、プロセスの終了を検出した場合に、終了したプロセスにロードされていた前記ロード対象ファイルを全て取得し、取得した前記ロード対象ファイル内の前記位置情報を参照して前記復旧コマンドファイルを全て取得し、取得した前記復旧コマンドファイルをロードして前記復旧処理を実行するものである。
【００１９】
本発明にかかるプロセス異常復旧方法の一態様は、プロセスのロード対象となるロード対象ファイルに対して、当該プロセス終了時に実行する復旧処理が記述された復旧コマンドファイルを配置した位置情報を含む復旧処理情報を記述して記憶しておき、プロセス終了を検出した場合に、当該プロセスにロードされていた前記ロード対象ファイルを全て取得し、取得した前記ロード対象ファイル内の前記位置情報を参照して前記復旧コマンドファイルを全て取得し、取得した前記復旧コマンドファイルをロードして前記復旧処理を実行するものである。
【発明の効果】
【００２０】
本発明によれば、プロセスの異常終了の際に共有リソースの復旧も含めたプロセスの復旧処理が正常に行うことができる。
【図面の簡単な説明】
【００２１】
【図１】実施の形態１にかかるオペレーティングシステムの構成を示すブロック図である。
【図２】実施の形態１にかかる復旧処理情報を示す図である。
【図３】実施の形態１にかかる復旧コマンドリストを示す図である。
【図４】実施の形態１にかかる実行ファイル及び共有ライブラリファイルの例を示す図である。
【図５】実施の形態１にかかるプロセス終了処理の詳細を示すフローチャートである。
【図６】実施の形態１にかかる復旧コマンドリスト生成の詳細を示すフローチャートである。
【図７】実施の形態１にかかる復旧処理情報からの復旧コマンド情報の抽出処理を示すフローチャートである。
【図８】実施の形態１にかかる復旧コマンドの実行処理を示すフローチャートである。
【図９】実施の形態２にかかるプロセス異常復旧装置の構成を示すブロック図である。
【図１０】実施の形態２にかかる復旧処理の実行を示すフローチャートである。
【図１１】実施の形態１にかかるプロセス異常復旧装置の概要構成を示すブロック図である。
【図１２】本発明が解決しようとする課題の１つに関連するプロセス監視システムの監視プロセス定義ファイルの図である。
【発明を実施するための形態】
【００２２】
実施の形態１
以下、図面を参照して本発明の実施の形態について説明する。図１は、本実施の形態にかかるオペレーティングシステム１の構成を示す図である。以下にオペレーティングシステム１の各構成要素について説明する。
【００２３】
オペレーティングシステム１は、コンピュータにおいて、ハードウェアを抽象化したインターフェイスをアプリケーションソフトウェアに提供するソフトウェアであり、基本ソフトウェアの一種である。
【００２４】
プロセス１０は、実行ファイル１０１をロードすることにより起動されたプロセスである。同様にプロセス１１は、実行ファイル１１１をロードすることにより起動されたプロセスである。実行ファイル１０１及び実行ファイル１１１は、プログラマにより記述された処理をコンピュータ上で実行可能な形式に書き換えたファイルである。共有ライブラリファイル２０１は、複数のプロセスで共通する処理が記載されたファイルである。
【００２５】
実行ファイル１０１及び実行ファイル１１１は共有ライブラリファイル２０１をリンクする。実行ファイル１０１が共有ライブラリファイル２０１とリンクしていることにより、プロセス１０には共有ライブラリ２０がロードされている。また実行ファイル１１１が共有ライブラリファイル２０１をリンクしていることにより、プロセス１１には共有ライブラリ２０がロードされている。プロセス１０及びプロセス１１は、共有メモリ５０を共有して使用している。また、共有ライブラリ２０は、共有ファイル６０を使用している。
【００２６】
実行ファイル１０１には復旧処理情報１０１１が定義されている。同様に実行ファイル１１１には復旧処理情報１１１１が定義されている。復旧処理情報１０１１及び復旧処理情報１１１１は実行ファイルをロードして起動されたプロセスが終了した場合において、どのような復旧処理を行うかを定義した情報である。図２に復旧処理情報の詳細を示す。図２では、復旧処理情報１０１１、復旧処理情報１１１１、復旧処理情報２０１１の形式を復旧処理情報７０を代表例として説明する。
【００２７】
図２に示すように復旧処理情報７０はテーブル形式になっており、実行順７０１、復旧コマンドパス７０２、及び動作指定７０３の項目を含む構成である。一つのテーブル行が一つの復旧コマンド情報を表している。テーブル行を複数定義することにより、一つの実行ファイルまたは共有ライブラリファイルに対して複数の復旧コマンド情報を設定することが可能である。
【００２８】
実行順７０１は、複数の復旧コマンド情報が抽出された際に、どのような順序で復旧コマンドを実行するかを指定するものである。復旧コマンドとは、プロセス終了時に実行される復旧処理である。複数の復旧コマンド情報が抽出された場合、各復旧コマンドに対応して設定されている実行順７０１の値が小さい順に実行していく。
【００２９】
復旧コマンドパス７０２は、復旧処理が実装されている復旧コマンドファイルのファイルシステム上の位置を指定するものである。復旧コマンドファイルは実行ファイルの一種である。プロセス終了検出時に、復旧コマンドパス７０２にて指定された位置にある復旧コマンドファイルがロードされ、実行される。
【００３０】
動作指定７０３は、プロセス終了検出の際に復旧コマンドを実行するかどうかの条件を指定するものである。動作指定７０３には、「常に実行」、「異常終了時のみ実行」、「正常終了時のみ実行」のいずれかが設定される。動作指定７０３に「常に実行」が指定された場合、プロセス終了の際に、同じ行の復旧コマンドパス７０２に指定されている復旧コマンドファイルが正常終了、異常終了に関係なく必ずロードされ、実行されることを意味する。動作指定７０３に「異常終了時のみ実行」が指定された場合、プロセスの異常終了の際に、同じ行の復旧コマンドパス７０２に指定されている復旧コマンドファイルがロードされ、実行されることを意味する。動作指定７０３に「異常終了時のみ実行」が指定された場合、プロセスの異常終了の際に、同じ行の復旧コマンドパス７０２に指定されている復旧コマンドファイルがロードされ、実行されることを意味する。なお、プロセスがシグナル等の外部要因によって強制終了させられた場合も、プロセスが異常終了したとして扱われる。
【００３１】
図２では、復旧処理情報７０に３つの行が設定されている。行７１１には、実行順７０１として"１０"、復旧コマンドパス７０２として"/usr/bin/command1"、動作指定７０３として「常に実行」が設定されている。 行７１２には、実行順７０１として"２０"、復旧コマンドパス７０２として"/usr/bin/command2"、動作指定７０３として「異常終了時のみ実行」が設定されている。 行７１３には、実行順７０１として"３０"、復旧コマンドパス７０２として"/usr/bin/command3"、動作指定７０３として「正常終了時のみ実行」が設定されている。
【００３２】
復旧処理情報７０が設定されている実行ファイルをロードして起動したプロセスが正常に終了した場合、行７１１と行７１３が抽出される。行７１１の実行順（"１０"）が行７０３の実行順（"３０"）よりも小さいので、"/usr/bin/command1"、"/usr/bin/command3"の順に復旧コマンドファイルがロードされ、実行される。
【００３３】
復旧処理情報７０が設定されている実行ファイルをロードして起動したプロセスが異常終了した場合、行７１１と行７１２が抽出される。行７１１の実行順（"１０"）が行７１２の実行順（"３０"）よりも小さいので、"/usr/bin/command1"、"/usr/bin/command2" の順に復旧コマンドファイルがロードされ、実行される。
【００３４】
図１において、復旧処理情報１０１１及び復旧処理情報１１１１には、復旧コマンドファイル４０の位置が設定されている。なお、復旧処理情報１０１１と復旧処理情報１１１１は、プロセスの仮想空間にはロードされない位置に配置されている。
【００３５】
復旧コマンドファイル４０は、共有メモリ５０に関する復旧処理が実装された実行ファイルである。復旧コマンドファイル４０をロードして起動されるプロセスは、共有メモリ５０の状態を検査し、不正な状態の修復を行う。 例えば、共有メモリ５０内に排他制御情報を書き込んだ状態でプロセスが異常終了してしまうと、その後共有メモリ５０を使用するプロセスにてデッドロックが発生する。この場合、復旧コマンドファイル４０をロードして起動されたプロセスが共有メモリ５０内の不正な排他制御情報を削除することで、共有メモリ５０を使用するプロセスにおけるデッドロック発生を防止する。
【００３６】
また、復旧コマンドファイル４０をロードして起動されるプロセスには、終了したプロセスの実行ファイル、およびプロセス起動時に指定された引数が指定される。当該指定は後述のプロセス終了処理部３０によってなされる。このため、 共有メモリ５０の復旧処理終了後、復旧コマンドファイル４０をロードして起動されるプロセスは、終了したプロセスを再起動することができる。
【００３７】
共有ライブラリファイル２０１には復旧処理情報２０１１が定義されている。復旧処理情報２０１１には、復旧コマンドファイル４１の位置が設定されている。なお、復旧処理情報２０１１は、プロセスの仮想空間にはロードされない位置に配置されている。
【００３８】
復旧コマンドファイル４１には、共有ファイル６０を復旧する処理が実装された実行ファイルである。復旧コマンドファイル４１をロードして起動されるプロセスは、共有ファイル６０の状態を検査し、不正な状態の修復を行う。たとえば、共有ファイル６０の内容の一貫性を検査し、不正な状態であれば共有ファイル６０の内容を変更する。
【００３９】
プロセス終了処理部３０は、オペレーティングシステム１上で動作するプロセスを終了させるための処理を実行する処理部である。プロセス終了処理部３０は、カーネル部２における一部機能を実現する処理部である。プロセス終了処理部３０は、復旧処理実行部３０１を備える。復旧処理実行部３０１は、復旧コマンド抽出部３０１１と復旧コマンド実行部３０１２を備える。
【００４０】
オペレーティングシステム１上で動作する任意のプロセスが終了する場合、 その終了要因に関係なくプロセス終了処理部３０が当該プロセスを消去する処理を行う。具体的には以下の処理を行う。
【００４１】
プロセス終了処理部３０がプロセスの終了処理を行う場合、当該プロセスに含まれる全てのスレッドが停止した後、復旧処理実行部３０１を呼び出す。復旧処理実行部３０１内の復旧コマンド抽出部３０１１は、終了したプロセスにロードされているファイル（実行ファイル、共有ライブラリファイル）を全て抽出し、それらのファイルに含まれている復旧処理情報を参照する。復旧コマンド抽出部３０１１は、プロセスの終了種別（異常終了か、正常終了か）をキーとして、ファイル（実行ファイル、共有ライブラリファイル）内の復旧処理情報を検索し、必要な復旧コマンド情報を全て抽出する。復旧コマンド抽出部３０１１は、抽出された復旧コマンド情報から必要な情報を抽出し、実行順に基づいて並べ替えた復旧コマンドリストを生成する。
【００４２】
復旧コマンドリストには、復旧コマンド実行部３０１２が実行すべき復旧コマンドに関する情報がリスト形式で記載される。復旧コマンドリストには、終了したプロセスにロードされているファイルのファイル名、復旧コマンドパス、実行順の情報が含まれる。復旧コマンドリストは、実行順が昇順となるように並べ替えられている。生成された復旧コマンドリストの例を図３に示す。
【００４３】
復旧コマンドリストの生成の後、復旧処理実行部３０１は終了したプロセスの終了要因、終了種別（正常終了、異常終了）、及びプロセス起動時の引数を抽出して保存する。そして、復旧処理実行部３０１は、当該プロセスの消滅処理を行った後に、復旧コマンド実行部３０１２を呼び出す。復旧コマンド実行部３０１２は、復旧コマンドリストに記述された復旧コマンドを実行順の順序で全て実行する。すなわち、復旧コマンド実行部３０１２は、復旧コマンドリストの復旧コマンドパスからファイルを取得してロードし、プロセスを生成する。この生成したプロセスにより復旧処理を実行する。この際に、復旧コマンド実行部３０１２は、保存しておいたプロセスの終了要因等の情報を生成するプロセスの実行の引数に用いることにより終了要因等に応じた復旧処理を実行できる。
【００４４】
図１の構成においてプロセス１０またはプロセス１１が異常終了した場合、復旧処理実行部３０１によって復旧コマンドファイル４０と復旧コマンドファイル４１とがロードされて実行される。復旧コマンドファイル４０をロードして実行することにより、共有メモリ５０に関する復旧処理が実行される。復旧コマンドファイル４１をロードして実行することにより、共有ファイル６０に関する復旧処理が実行される。ここで共有メモリ５０を使用するプログラムを新規に作成する場合、そのプログラムの実行ファイル内に復旧処理情報を作成し、内部に復旧コマンドファイル４０の情報を設定する。これにより、共有メモリ５０に関する復旧処理が実行される。共有ファイル６０を使用するプログラムを新規に作成する場合、共有ライブラリファイル２０１を新規プログラムの実行ファイルにリンクする。これにより、共有ライブラリファイル２０１内の復旧処理情報２０１１を参照することができる。復旧処理情報２０１１を参照できることにより、復旧コマンドファイル４１が復旧処理として実行されることとなる。すなわち、共有ファイル６０に関する復旧処理が実行される。
【００４５】
次に、プロセスが異常終了した場合の、オペレーティングシステム１の動作例を説明する。オペレーティングシステム１内の実行ファイル１０１、実行ファイル１１１、及び共有ライブラリファイル２０１の復旧処理情報は図４に示すように設定されている。
【００４６】
図４を参照すると、実行ファイル１０１及び実行ファイル１１１をロードしたプロセスが異常終了した場合、復旧コマンドファイル４０をロードして実行するように設定されている。また、共有ライブラリファイル２０１をロードした共有ライブラリが異常終了した場合、復旧コマンドファイル４１をロードして実行するように設定されている。
【００４７】
当該設定（図４）がなされた場合において、プロセス１０が外部要因によって強制終了されたこと、すなわちプロセス１０が異常終了したことを考える。プロセス１０には共有ライブラリ２０がロードされている。そのため、プロセス１０の異常終了時に、実行ファイル１０１内の復旧処理情報１０１１に設定されている復旧コマンドファイル４０と、共有ライブラリファイル２０１内の復旧処理情報２０１１に設定されている復旧コマンドファイル４１が抽出される。
【００４８】
抽出された復旧コマンドファイル４０に関連付けられた実行順（２０）と、復旧コマンドファイル４１に関連付けられた実行順（１０）とを比較すると、復旧コマンドファイル４１に関連付けられた実行順の方が値が小さい。そのため、復旧コマンドファイル４１、復旧コマンドファイル４０の順序で復旧コマンドファイルがロードされ、実行される。この順序で復旧コマンドファイルがロードされ、実行されることにより、復旧コマンドファイル４１による共有メモリ５０の修復が行われた後に、復旧コマンドファイル４０による共有ファイル６０の修復が行われる。
【００４９】
次に、プロセス終了時のオペレーティングシステム１の処理の詳細についてフローチャートを用いて説明する。図５は、プロセス終了処理の詳細を示すフローチャートである。プロセスが明示的に終了した場合（正常終了）、またはプロセスがシグナル等の外部要因によって強制終了した場合（異常終了）、プロセス終了処理部３０は、終了したプロセス内に含まれる全てのスレッドを停止する（Ｓ１）。続いて、復旧コマンド抽出部３０１１により当該プロセスにロードされている全ての実行ファイル及び共有ライブラリファイルに関する復旧処理情報から復旧コマンドリストを生成する（Ｓ２）。復旧コマンドリスト生成（Ｓ２）の詳細を図６のフローチャートを用いて説明する。
【００５０】
復旧コマンド抽出部３０１１は、空の復旧コマンドリストを作成する（Ｓ２１）。復旧コマンド抽出部３０１１は、終了したプロセスの仮想空間管理情報を参照し、当該プロセスの仮想空間にロードされている全てのファイルを抽出する（Ｓ２２）。復旧コマンド抽出部３０１１は、抽出したファイルから最初のファイルを処理対象として選択する（Ｓ２３）。
【００５１】
選択したファイルが実行ファイルまたは共有ライブラリファイルである場合（Ｓ２４：Ｙｅｓ）、選択したファイル内に復旧処理情報が存在するか否かを判定する（Ｓ２５）。復旧処理情報が存在する場合（Ｓ２５：Ｙｅｓ）、復旧コマンド抽出部３０１１は、復旧処理情報からプロセスの終了要因に対応する情報を抽出して復旧コマンドリストに追加する（Ｓ２６）。Ｓ２６の処理詳細を図７のフローチャートを用いて説明する。
【００５２】
復旧コマンド抽出部３０１１は、ファイル内の復旧処理情報のテーブルを読み込み、そのテーブルの最初の行を処理対象として選択する（Ｓ２６１）。最初の行に記載の動作指定７０３が「常に実行」の場合（Ｓ２６２：Ｙｅｓ）、選択中のファイル名、復旧コマンドパス７０２、実行順７０１の情報を抽出し、抽出した情報を復旧コマンドリストに追加する（Ｓ２６６）。
【００５３】
最初の行に記載の動作指定７０３が「常に実行」でない場合であっても（Ｓ２６２：Ｎｏ）、当該プロセスが正常終了であり（Ｓ２６３：Ｙｅｓ）、かつ動作指定７０３が「正常終了時のみ実行」である（Ｓ２６４：Ｙｅｓ）場合、または、当該プロセスが異常終了であり（Ｓ２６３：Ｎｏ）、かつ動作指定７０３が「異常終了時のみ実行」である（Ｓ２６５：Ｙｅｓ）場合、復旧コマンドリストへの追加処理を行う（Ｓ２６６）。
【００５４】
一方、最初の行に記載の動作指定７０３が「常に実行」でない場合であり（Ｓ２６２：Ｙｅｓ）、かつ当該プロセスが正常終了であり（Ｓ２６３：Ｙｅｓ）、かつ、動作指定７０３が「正常終了時のみ実行」ではない（Ｓ２６５：Ｙｅｓ）場合、復旧コマンドリストへの追加処理（Ｓ２６６）は行わない。同様に、最初の行に記載の動作指定７０３が「常に実行」でない場合であり（Ｓ２６２：Ｙｅｓ）、かつ当該プロセスが異常終了であり（Ｓ２６３：Ｎｏ）、かつ、動作指定７０３が「異常終了時のみ実行」ではない（Ｓ２６５：Ｎｏ）場合、復旧コマンドリストへの追加処理（Ｓ２６６）は行わない。
【００５５】
上述のＳ２６２からＳ２６６の処理を抽出した全ての行に対して実行し、処理を終了する（Ｓ２６７、Ｓ２６８）。
【００５６】
以上、図７を用いて説明したように、あるファイルに記載の復旧処理情報に基づいて復旧コマンドリストに復旧コマンドの情報を追加する処理（Ｓ２６）が実行される。一のファイルからの復旧コマンドの情報の追加が終わった後に、復旧コマンド抽出部３０１１は、全てのファイルに対して処理を行ったか否かを判定する（Ｓ２７）。全てのファイルに対して処理を終了していなかった場合（Ｓ２７：Ｎｏ）、次のファイルが選択され（Ｓ２８）、復旧コマンドリストに対する復旧コマンドの情報の追加処理は継続される（Ｓ２４〜Ｓ２６）。
【００５７】
全てのファイルに対する処理が終わった場合（Ｓ２７：Ｙｅｓ）、復旧コマンド抽出部３０１１は、作成された復旧コマンドリストの各行を実行順の値が昇順となるようにソートする（Ｓ２９）。作成された復旧コマンドリストの一例は図３のようになる。
【００５８】
以上、図６と図７を用いて説明したように、復旧コマンド抽出部３０１１は復旧コマンドリストを生成する（図５のＳ２）。続いて、復旧処理実行部３０１は、終了したプロセスの終了要因、プロセスの識別子、及び当該プロセスが起動された際に指定された引数を記憶する（Ｓ３）。これらの値は、復旧コマンド実行部３０１２が復旧コマンドファイルをロードして実行する際の引数として使用される。
【００５９】
次に、プロセス終了処理部３０は、終了したプロセスに割り当てられた仮想空間等の資源を全て解放する（Ｓ４）。プロセス終了処理部３０は、当該プロセスの管理情報を削除し、当該プロセスを消滅させる（Ｓ５）。消滅処理の後に、復旧コマンド実行部３０１２は、Ｓ２の処理で生成された復旧コマンドリストの各行に記載された復旧コマンドパスの位置から復旧コマンドファイルを取得し、ロードすることによって復旧処理を実行する（Ｓ６）。復旧コマンド実行部３０１２による復旧処理の実行処理を図８を用いて説明する。
【００６０】
復旧コマンド実行部３０１２は、復旧コマンド抽出部３０１１により生成された復旧コマンドリストが空か否かを判定する（Ｓ６１）。復旧コマンドリストが空ではない場合（Ｓ６１：Ｎｏ）、復旧コマンド実行部３０１２は復旧コマンドリストの先頭行を取り出す（Ｓ６２）。取り出された行は、復旧コマンドリストから削除される。
【００６１】
復旧コマンド実行部３０１２は取り出された行の復旧コマンドパスに記載された位置に復旧コマンドファイルが存在するか否かを判定する（Ｓ６３）。存在する場合（Ｓ６３：Ｙｅｓ）、復旧コマンド実行部３０１２は当該復旧コマンドファイルをロードしてプロセスを生成する（Ｓ６４）。プロセス生成後に復旧コマンド実行部３０１２は、生成したプロセスの終了を待ち合わせる（Ｓ６５）。復旧コマンドファイルが存在しない場合（Ｓ６３：Ｎｏ）、復旧コマンド実行部３０１２は、復旧コマンドリストが空か否かの判定から処理（Ｓ６１）に戻り、処理を継続する。
【００６２】
なお、Ｓ６４において、資源不足等の理由により、プロセスの生成が失敗する可能性がある。 しかし、復旧コマンド実行用の資源を前もって予約しておく等の技術を用いることにより、ステップＳ６４におけるプロセス生成失敗を回避することができる。 それでも何らかの理由により復旧コマンド用プロセスの生成に失敗する場合、システム全体を停止させる、またはプロセスを生成可能となるまで待ち合わせる等の処理をシステム全体の方針に従って実装してもよい。
【００６３】
復旧コマンド実行部３０１２により生成されたプロセスは、Ｓ６２において抽出された復旧コマンドの情報を示す行の復旧コマンドパスにおいて指定される復旧コマンドファイルを当該プロセスの仮想空間上にロードする（Ｓ６４１）。そして、当該プロセスは、復旧処理を実行する（Ｓ６４２）。
【００６４】
ここで、復旧処理の実行（Ｓ６４２）に際して、終了したプロセスがロードした実行ファイルの位置、復旧処理情報が設定されていたファイルの位置、終了したプロセスの識別子、終了したプロセスの終了要因、及び終了したプロセスが起動された際に指定された引数が、復旧コマンド実行時の引数として指定される。これらの情報（終了したプロセスの識別子等）は、Ｓ３において予め記憶されている。
【００６５】
復旧コマンドリストが空になった時点で、復旧コマンド実行部３０１２は処理を終了する（Ｓ６１：Ｎｏ）。
【００６６】
続いて、本実施の形態にかかるプロセス異常復旧装置の効果について説明する。上述のように、実行ファイル、共有ライブラリファイル等のプロセスにロードされるファイル毎に、プロセス終了時の復旧処理が記述された復旧コマンドファイルを関連付ける。プロセス終了時には、復旧コマンドファイルがロードされ、復旧処理が実行される。そのため、実行ファイルと復旧コマンドファイルを関連付けることのみで、共有リソースの復旧処理等を実現できる。これにより、複数の実行ファイルにおいてある一つの復旧コマンドファイルを共有することが可能となり、異常状態からの復旧処理を共通化できる。
【００６７】
共有ライブラリファイルに対して復旧処理情報を定義できることにより、共有ライブラリが使用する共有リソースの復旧処理が実現される。そのため、共有ライブラリを使用する処理を含む実行ファイルが新規に作成される場合であっても、共有ライブラリが使用する共有リソースの復旧処理を考慮する必要がない。
【００６８】
特許文献１に記載の技術ではプロセス名が同じ複数のプロセスが存在する場合、復旧処理が正しく行われない恐れがあった。しかし本実施の形態にかかるオペレーティングシステムでは、実行ファイル、共有ライブラリファイルのファイル毎に復旧処理を関連付けるため、同じプロセス名を持つプロセスが複数存在する場合であっても各プロセスに対応する所望の復旧処理が実現できる。
【００６９】
実行ファイル、共有ライブラリファイル等のファイル毎に復旧処理を関連付けるので、プロセス毎に復旧処理を関連付ける特許文献１の方式と比べて設定作業が簡易である。
【００７０】
また、上記のように復旧コマンドファイルはプロセス終了時にのみロードされ、復旧処理が常にメモリ上に常駐しているわけではない。このため、システム稼働中に復旧コマンドファイルを修正した場合であっても、システムを再起動することなく当該修正が復旧コマンドファイルのロード時に反映される。
【００７１】
実行ファイルの復旧処理情報、または共有ライブラリファイルの復旧処理情報には、復旧コマンドファイルの位置を指定するのみである。したがって、実行ファイル、または共有ライブラリファイルのファイルシステム上の位置を変更した場合であっても、復旧コマンドファイルの位置が変更されなければ復旧処理が正常に実行される。
【００７２】
実施の形態２
本発明の実施の形態２は、共有ライブラリにより復旧処理を実行する点を特徴とする。図９を参照して、本実施の形態にかかるプロセス異常復旧装置の基本構成、及び動作について、実施の形態１と異なる部分を説明する。なお、図９において、同一名及び同一符号を付した処理部は実施の形態１と基本的に同じ処理を行う。
【００７３】
実行ファイル１０１には復旧処理情報１０１１が定義されている。同様に実行ファイル１１１には復旧処理情報１１１１が定義されている。復旧処理情報１０１１及び復旧処理情報１１１１には、復旧ライブラリファイル８０の位置が設定されている。復旧ライブラリファイル８０は、共有メモリ５０を使用しているプロセスが異常終了した際に実行すべき処理が記述された共有ライブラリファイルである。
【００７４】
実行ファイル２０１には復旧処理情報２０１１が定義されている。復旧ライブラリファイル８１は、共有ファイル６０を使用しているプロセスが異常終了した際に実行すべき処理が記述された共有ライブラリファイルである。
【００７５】
監視プロセス９０は、他のプロセス（監視対象プロセス）の状況を監視するプロセスである。監視プロセス９０は、プロセス監視部９０１と、復旧処理実行部９０２と、を備える。監視プロセス９０は、カーネル部２とは独立したプロセスとして存在する。
【００７６】
プロセス監視部９０１は、既存の技術を用いてプロセス１０、及びプロセス１１を監視する。またプロセス監視部９０１は、監視対象プロセスがロードしているファイル（実行ファイル、共有ライブラリファイル）の一覧を定期的に取得し、その一覧を保持しておく。当該ファイルの一覧取得はオペレーティングシステム１の機能を用いることで実現できる。
【００７７】
プロセス監視部９０１が監視対象プロセスの終了を検出した場合、当該プロセスの終了種別（異常終了か、正常終了か）をオペレーティングシステム１の機能を用いて取得する。そののち、プロセス監視部９０１は復旧処理実行部９０２を呼び出す。復旧処理実行部９０２は、復旧ライブラリ抽出部９０２１を呼び出す。呼び出された復旧ライブラリ抽出部９０２１は復旧ライブラリリストの作成を行う。なお、復旧ライブラリリストとは、実施形態１の復旧コマンドリストと対応するものである。復旧ライブラリリストの作成方法は、前述の第１の実施形態における図６、及び図７に示した手順とほぼ同様である。
【００７８】
但し、本実施の形態においては、図６のステップＳ２２において当該プロセスにロードされている全ファイルを抽出する場合に、プロセス監視部９０１が保持しているファイル一覧を使用する。
【００７９】
復旧ライブラリ抽出部９０２１による復旧ライブラリリストの作成の後、復旧処理実行部９０２２が復旧ライブラリリストを基に復旧処理の実行を行う。復旧ライブラリ実行部９０２２による復旧処理の実行の処理手順について、図１０を用いて説明する。
【００８０】
復旧処理実行部９０２２は、復旧ライブラリ抽出部９０２１により生成された復旧ライブラリリストが空か否かを判定する（Ｓ７１）。復旧ライブラリリストが空ではない場合（Ｓ７１：Ｎｏ）、復旧処理実行部９０２２は復旧ライブラリリストの先頭行を取り出す（Ｓ７２）。取り出された行は、復旧ライブラリリストから削除される。
【００８１】
取り出された行に含まれる復旧ライブラリパスに記載された位置に復旧ライブラリファイルが存在するか否かを判定し（Ｓ７３）、存在する場合（Ｓ７３：Ｙｅｓ）にはその復旧ライブラリを監視プロセス９０の仮想空間にロードする（Ｓ７４）。そして、復旧ライブラリ内の復旧処理を実行する（Ｓ７５）。
【００８２】
ここで、復旧処理の実行（Ｓ７５）に際して、終了したプロセスの実行ファイルの位置、復旧処理情報が設定されていたファイルの位置、終了したプロセスの識別子、終了したプロセスの終了要因、及び終了したプロセスが起動された際に指定された引数が、復旧ライブラリの引数として指定される。
【００８３】
復旧処理が実行された後に（Ｓ７５）、復旧ライブラリを監視プロセス９０の仮想空間からアンロードする（Ｓ７６）。
【００８４】
一方、復旧ライブラリファイルが存在しない場合（Ｓ７３：Ｎｏ）、復旧処理実行部９０２２は、復旧ライブラリリストが空か否かの判定から処理（Ｓ７１）に戻り、処理を継続する。
【００８５】
上記の処理（Ｓ７１〜Ｓ７６）は、復旧ライブラリリストが空になる（Ｓ７１：Ｎｏ）まで継続される。
【００８６】
続いて、本実施の形態にかかるプロセス異常復旧装置の効果について説明する。上述のように、復旧処理を共有ライブラリとして実現している。これにより、オペレーティングシステム１のカーネル部２を変更することなく、プロセス異常に関する復旧処理を実現できる。また、復旧処理を実行する際に、新たなプロセスを生成する必要がなくなる。
【００８７】
なお、図１１は本発明の実施の形態１にかかるプロセス異常復旧装置の最小構成を示す図である。プロセス１２によるロード対象となる実行ファイル、共有ライブラリファイル等のロード対象ファイル１２１内に復旧処理情報１２１１が備えられている。復旧処理情報１２１１は、ロート対象ファイル１２１をロードすることにより生成されたプロセス１２が終了した場合に実行する復旧コマンドファイル４２の位置が記述されている。
【００８８】
プロセス１２が終了した場合、復旧処理実行部３０は終了したプロセス１２がロードしているロード対象ファイル１２１を選択し、当該ロード対象ファイル１２１内の復旧処理情報１２１１を参照して復旧コマンドファイル４２を抽出する。復旧処理実行部３０は、抽出した復旧コマンドファイル４２をロードして復旧処理を行う。
【００８９】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【００９０】
（付記１）
プロセスのロード対象となるロード対象ファイルと、
プロセスの終了の際に、終了にかかる前記プロセスに関する処理を行う復旧処理実行部と、を備え、
前記ロード対象ファイルは、当該ファイルをロードしたプロセスが終了した際に実行する復旧処理が記述された復旧コマンドファイルを配置した位置情報、を含む復旧処理情報を有し、
前記復旧処理実行部は、プロセスの終了を検出した場合に、終了したプロセスにロードされていた前記ロード対象ファイルを全て取得し、
取得した前記ロード対象ファイル内の前記位置情報を参照して前記復旧コマンドファイルを全て取得し、
取得した前記復旧コマンドファイルをロードして前記復旧処理を実行する、プロセス異常復旧装置。
【００９１】
（付記２）
前記復旧処理実行部は、プロセスの終了を監視する監視プロセス内に設けられたことを特徴とする付記１に記載のプロセス異常復旧装置。
【符号の説明】
【００９２】
１        オペレーティングシステム
２        カーネル部
１０      プロセス
１１      プロセス
２０      共有ライブラリ
３０      プロセス終了処理部
４０      復旧コマンドファイル
４１      復旧コマンドファイル
４２      復旧コマンドファイル
５０      共有メモリ
６０      共有ファイル
７０      復旧処理情報
８０      復旧ライブラリ
８１      復旧ライブラリ
９０      監視プロセス
１０１    実行ファイル
１１１    実行ファイル
１２１    ロード対象ファイル
２０１    共有ライブラリファイル
３０１    復旧処理実行部
９０１    プロセス監視部
９０２    復旧処理実行部
１０１１  復旧処理情報
１１１１  復旧処理情報
１２１１  復旧処理情報
２０１１  復旧処理情報
３０１１  復旧コマンド抽出部
３０１２  復旧コマンド実行部
９０２１  復旧ライブラリ抽出部
９０２２  復旧ライブラリ実行部
【図１】
0005504876.tif 000002
【図２】
0005504876.tif 000003
【図３】
0005504876.tif 000004
【図４】
0005504876.tif 000005
【図５】
0005504876.tif 000006
【図６】
0005504876.tif 000007
【図７】
0005504876.tif 000008
【図８】
0005504876.tif 000009
【図９】
0005504876.tif 000010
【図１０】
0005504876.tif 000011
【図１１】
0005504876.tif 000012
【図１２】
0005504876.tif 000013