(57)【特許請求の範囲】
【請求項１】
親プロセス及び子プロセスの親子関係を定義するメモリ上の制御テーブルに基づいてプロセスを管理するプロセス管理プログラムにおいて、
コンピュータを、
前記親プロセスの代理親プロセスを、前記子プロセスの１つとして前記制御テーブルに登録する代理親登録手段、
前記親プロセスの異常終了を検出するプロセス終了検出手段、
前記プロセス終了検出手段により親プロセスの異常終了が検出されたとき、前記代理親プロセスが子プロセスの親プロセスになるように、前記制御テーブルの親子関係を更新する制御テーブル更新手段、
として機能させることを特徴とするプロセス管理プログラム。
【請求項２】
前記制御テーブル更新手段は、前記制御テーブルの親子関係を更新するとき、システムプロセスにより再起動された親プロセスを、前記親プロセスとして機能する代理親プロセスの代理親プロセスとして登録することを特徴とする請求項１記載のプロセス管理プログラム。
【請求項３】
前記制御テーブル更新手段は、前記制御テーブルの親子関係を更新するとき、前記代理親プロセスにより生成されたプロセスを、前記親プロセスとして機能する代理親プロセスの代理親プロセスとして登録することを特徴とする請求項１記載のプロセス管理プログラム。
【請求項４】
親プロセス及び子プロセスの親子関係を定義するメモリ上の制御テーブルに基づいてプロセスを管理するプロセス管理方法において、
コンピュータが、
前記親プロセスの代理親プロセスを、前記子プロセスの１つとして前記制御テーブルに登録すると共に、
前記親プロセスの異常終了を検出したとき、前記代理親プロセスが子プロセスの親プロセスになるように、前記制御テーブルの親子関係を更新すること
を特徴とするプロセス管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセスを管理する技術に関する。
【背景技術】
【０００２】
ＵＮＩＸ（登録商標）などのオペレーティングシステムでは、アプリケーションの実行主体である子プロセスが何らかの原因で異常終了したときに、親プロセスが子プロセスを再起動することで、アプリケーションの運用を継続させる機構が備えられている。また、子プロセスよりも先に親プロセスが終了したときに、子プロセスが使用していたリソースを解放できなくなってしまうことから、「initプロセス」と呼ばれるシステムプロセスが子プロセスの里親に設定される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平０１−２２４８４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、システムプロセスは特定のアプリケーションに対応していないため、システムプロセスを里親とする子プロセスが異常終了したときには、その子プロセスを再起動させることができなくなってしまう。このため、システムプロセスを里親とする子プロセスが異常終了すると、アプリケーションの運用を継続させることができなくなってしまうおそれがあった。
【０００５】
そこで、従来技術の問題点に鑑み、アプリケーションに対応した代理親プロセスを里親とすることで、親プロセスが異常終了した後で子プロセスが異常終了しても、アプリケーションの運用を継続できるプロセス管理技術を提供することを目的とする。
【課題を解決するための手段】
【０００６】
このため、本提案技術では、親プロセス及び子プロセスの親子関係を定義するメモリ上の制御テーブルに基づいてプロセスを管理するコンピュータが、親プロセスの異常終了を検出したとき、代理親プロセスが子プロセスの親プロセスになるように、制御テーブルの親子関係を更新するようにする。ここで、代理親プロセスとは、親プロセスによる子プロセスの監視及び管理を代行する里親となるプロセスのことをいう。
【発明の効果】
【０００７】
本提案技術によれば、親プロセスが異常終了したときには、代理親プロセスが子プロセスの監視及び管理を行うこととなるため、その後、異常終了した子プロセスを再起動させることができるようになる。このため、子プロセスが異常終了しても、アプリケーションの運用を継続させることが可能となり、高信頼性を有する情報システムを構築することができる。
【図面の簡単な説明】
【０００８】
【図１】初期状態におけるプロセス親子関係の説明図である。
【図２】親プロセス異常終了後のプロセス親子関係の説明図である。
【図３】コンピュータが具現化する各種機能のブロック図である。
【図４】制御テーブルの説明図である。
【図５】親プロセスと子プロセスとの親子関係の説明図である。
【図６】プロセス終了検出処理を示すフローチャートである。
【図７】制御テーブル更新処理を示すフローチャートである。
【図８】親プロセスが異常終了したときに更新される親子関係の説明図である。
【図９】代理親プロセスの第１変形例の説明図である。
【図１０】代理親プロセスの第２変形例の説明図である。
【図１１】具体的事例を考察するための前提条件の説明図である。
【図１２】親プロセスが子プロセスより先に終了した場合のシーケンス図である。
【図１３】代理親プロセスが親プロセスより先に終了した場合のシーケンス図である。
【発明を実施するための形態】
【０００９】
以下、添付された図面を参照して本提案技術を詳述する。
ＵＮＩＸ（登録商標）などのオペレーティングシステムでは、実行状態にあるプログラムを「プロセス」と呼び、任意のプロセスから新しいプロセスを生成することができる。この場合、新しいプロセスを生成したプロセスを「親プロセス」と呼ぶ一方、親プロセスから生成されたプロセスを「子プロセス」と呼ぶ。
【００１０】
本提案技術では、図１に示すように、親プロセスＰＰを代理する代理親プロセスを子プロセスＣＰ1〜ＣＰn+1の１つに設定する。そして、親プロセスＰＰが異常終了したときに、図２に示すように、代理親プロセスとしての子プロセスＣＰn+1を子プロセスＣＰ1〜ＣＰnの里親とすることで、孤児プロセスが存在することを回避し、アプリケーションの運用を継続できるようにする。
【００１１】
具体的には、図３に示すように、プロセス管理装置として機能するコンピュータ１０は、ストレージにインストールされたプロセス管理プログラムを実行することで、プロセス終了検出部２０と、制御テーブル更新部３０と、を夫々具現化する。ここで、プロセス管理プログラムは、オペレーティングシステムに組み込まれ、ＣＤ−ＲＯＭなどのコンピュータ読取可能な記録媒体からコンピュータのストレージにインストールされる。また、プロセル終了検出部２０及び制御テーブル更新部３０は、夫々、プロセス終了検出手段及び制御テーブル更新手段の一例として挙げられる。
【００１２】
プロセス終了検出部２０は、１つの親プロセス及び複数の子プロセスを有するアプリケーションにおいて、例えば、ハードウエア障害又はソフトウエア障害で親プロセスが異常終了したことを検出する。制御テーブル更新部３０は、プロセス終了検出部２０により親プロセスの異常終了が検出されたことを契機として、メモリに展開された制御テーブル４０を更新する。
【００１３】
制御テーブル４０は、プロセスを管理するために、親プロセスと子プロセスとの関係付け（親子関係）を定義するものであって、各プロセスごと、即ち、親プロセス及び各子プロセスごとに独立して設けられる。制御テーブル４０は、図４に示すように、子プロセスへのポインタ，兄弟プロセス（同じ親プロセスが生成した他の子プロセス）へのポインタ，親プロセスへのポインタ及び代理親プロセスへのポインタを有する。ここで、「代理親プロセス」とは、後述するように、親プロセスが何らかの原因で異常終了したとき、その親プロセスの代わりに、子プロセスの終了監視，リソース解放及び課金情報収集などを行う代替プロセスである。なお、制御テーブル４０において、子プロセス，兄弟プロセス，親プロセス又は代理親プロセスへのポインタが設定されていないとき、即ち、他のプロセスとの関係付けがなされていないときには、例えば、なにもないことを示す「ＮＵＬＬ」などが設定される。
【００１４】
ここで、具体的な事例を用いて、制御テーブル４０による親プロセスと子プロセスとの関係付けがどのように行われるかを説明する。前提条件として、図５に示すように、親プロセスＰＰにより子プロセスＣＰ1〜ＣＰ3が順次生成されるアプリケーションにおいて、子プロセスＣＰ3が代理親プロセスとして機能するものを想定する。
【００１５】
親プロセスＰＰが子プロセスＣＰ1を生成すると、オペレーティングシステムが、親プロセスＰＰの制御テーブル４０の子プロセスに子プロセスＣＰ1へのポインタを設定すると共に、子プロセスＣＰ1の制御テーブル４０の親プロセスに親プロセスＰＰへのポインタを設定する。また、親プロセスＰＰが子プロセスＣＰ2を生成すると、オペレーティングシステムが、子プロセスＣＰ1の制御テーブル４０の兄弟プロセスに子プロセスＣＰ2へのポインタを設定すると共に、子プロセスＣＰ2の制御テーブル４０の親プロセスに親プロセスＰＰへのポインタを設定する。さらに、親プロセスＰＰが子プロセスＣＰ3を生成すると、オペレーティングシステムが、子プロセスＣＰ2の制御テーブル４０の兄弟プロセスに子プロセスＣＰ3へのポインタを設定すると共に、子プロセスＣＰ3の制御テーブル４０の親プロセスに親プロセスＰＰへのポインタを設定する。親プロセスＰＰが子プロセスＣＰ3を生成するときに「代理親プロセス設定手続き」を呼び出すことで、親プロセスＰＰの制御テーブル４０の代理親プロセスに子プロセスＣＰ3へのポインタが設定される。そして、親プロセスＰＰの制御テーブル４０の子プロセスにより特定される子プロセスＣＰ1から、その制御テーブル４０の兄弟プロセスを順次辿ることで、親プロセスＰＰに関係付けられた子プロセスＣＰ1〜ＣＰ3を特定することができる。
【００１６】
なお、親プロセスＰＰが「代理親プロセス設定手続き」を呼び出す処理は、代理親登録手段の一例として挙げられる。
図６は、プロセス終了検出部２０が、プロセス管理プログラムの実行が開始されたことを契機として所定時間ごとに繰り返し実行するプロセス終了検出処理を示す。
【００１７】
ステップ１（図では「Ｓ１」と略記する。以下同様。）では、プロセス終了検出部２０が、親プロセスが異常終了したか否かを判定する。そして、プロセス終了検出部２０は、親プロセスが異常終了したと判定すれば処理をステップ２へと進める一方（Ｙｅｓ）、親プロセスが異常終了していないと判定すれば処理を終了させる（Ｎｏ）。
【００１８】
ステップ２では、プロセス終了検出部２０が、親プロセスが異常終了したことを示すプロセス異常終了通知を制御テーブル更新部３０に送信する。
図７は、制御テーブル更新部３０が、プロセス終了検出部２０からのプロセス異常終了通知を受信したことを契機として実行する制御テーブル更新処理を示す。
【００１９】
ステップ１１では、制御テーブル更新部３０が、親プロセスの制御テーブル４０を参照し、その子プロセスにポインタが設定されているか否かを介して、子プロセスが存在するか否かを判定する。そして、制御テーブル更新部３０は、子プロセスが存在していると判定すれば処理をステップ１２へと進める一方（Ｙｅｓ）、子プロセスが存在していない（親プロセスのみが存在する）と判定すれば処理を終了させる（Ｎｏ）。
【００２０】
ステップ１２では、制御テーブル更新部３０が、親プロセスの制御テーブル４０を参照し、その代理親プロセスにポインタが設定されているか否かを介して、代理親プロセスが登録済みであるか否かを判定する。そして、制御テーブル更新部３０は、代理親プロセスが登録済みであると判定すれば処理をステップ１３へと進める一方（Ｙｅｓ）、代理親プロセスが登録済みでない（登録されていない）と判定すれば処理をステップ１４へと進める（Ｎｏ）。
【００２１】
ステップ１３では、制御テーブル更新部３０が、親プロセスの制御テーブル４０に登録されていた代理親プロセスを新たな親プロセスに選定した後、処理をステップ１５へと進める。
【００２２】
ステップ１４では、制御テーブル更新部３０が、システムプロセスを新たな親プロセスに選定した後、処理をステップ１５へと進める。
ステップ１５では、制御テーブル更新部３０が、親プロセスの制御テーブル４０を参照し、親プロセスに関係付けられた最初の子プロセスを選定する。
【００２３】
ステップ１６では、制御テーブル更新部３０が、新たな親プロセスのポインタが選定した子プロセスを指しているか否かを介して、子プロセスは新たな親プロセスであるか否かを判定する。そして、制御テーブル更新部３０は、子プロセスは新たな親プロセスでないと判定すれば処理をステップ１７へと進める一方（Ｙｅｓ）、子プロセスは新たな親プロセスであると判定すれば処理をステップ１８へと進める（Ｎｏ）。
【００２４】
ステップ１７では、制御テーブル更新部３０が、選定した子プロセスについて、その制御テーブル４０の親プロセスに新たな親プロセスを設定した後、処理をステップ１９へと進める。
【００２５】
ステップ１８では、制御テーブル更新部３０が、選定した子プロセス（代理親プロセス）について、その制御テーブルの親プロセスにシステムプロセスを設定した後、処理をステップ１９へと進める。
【００２６】
ステップ１９では、制御テーブル更新部３０が、選定した子プロセスの制御テーブル４０を参照し、兄弟プロセスにポインタが設定されているか否かを介して、兄弟プロセスがあるか否かを判定する。そして、制御テーブル更新部３０は、兄弟プロセスがない（最後の子プロセスまで処理した）と判定すれば処理を終了させる一方（Ｙｅｓ）、兄弟プロセスがあると判定すれば処理をステップ２０へと進める（Ｎｏ）。
【００２７】
ステップ２０では、制御テーブル更新部３０が、選定した子プロセスの制御テーブル４０に設定されている兄弟プロセスを子プロセスとして選定した後、処理をステップ１６へと戻す。
【００２８】
ここで、かかるプロセス管理技術の理解を容易ならしめることを目的として、図５に示す親プロセスと子プロセスとの関係付けがどのように変化するかを説明する。
プロセス終了検出部２０が親プロセスＰＰの異常終了を検出すると、その親プロセスＰＰの制御テーブル４０の子プロセスが参照され、子プロセスが存在するか否かが判定される。親プロセスＰＰの制御テーブル４０には、その子プロセスとして子プロセスＣＰ1が関係付けられているので、子プロセスが存在すると判定される。また、親プロセスＰＰの制御テーブル４０の代理親プロセスが参照され、代理親プロセスが登録済みであるか否かが判定される。親プロセスＰＰの制御テーブル４０には、その代理親プロセスとして子プロセスＣＰ3が設定されているので、代理親プロセスが登録されていると判定される。そして、新たな親プロセスとして、代理親プロセスたる子プロセスＣＰ3が選定される。
【００２９】
また、親プロセスＰＰから順次辿った子プロセスＣＰ1〜ＣＰ3について、新たな親プロセスであるか否かが判定される。子プロセスＣＰ1及びＣＰ2は新たな親プロセスではないため、その制御テーブル４０の親プロセスに子プロセスＣＰ3が夫々設定される。一方、子プロセスＣＰ3は新たな親プロセスであるため、その制御テーブル４０の親プロセスにシステムプロセスＳＰが設定される。
【００３０】
このような過程を経て、子プロセスＣＰ1〜ＣＰ3の制御テーブル４０は、図８に示すように更新される。この場合、代理親プロセスとしての子プロセスＣＰ3が、子プロセスＣＰ1及びＣＰ2の終了監視などを行うと共に、子プロセスＣＰ3が異常終了したことに備えて、その親プロセスとしてシステムプロセスＳＰが設定される。
【００３１】
このため、親プロセスが異常終了したときには、代理親プロセスが子プロセスの終了監視，リソース解放及び課金情報収集などを行うことができる。また、代理親プロセスは親プロセスから生成されるため、代理親プロセスはアプリケーションに対応したものとなり、異常終了した子プロセスを再起動させることができる。
【００３２】
従って、子プロセスが異常終了しても、アプリケーションの運用を継続させることが可能となり、高信頼性を有する情報システムを構築することができる。このとき、親プロセスとは異なる代理親プロセスが異常終了したときには、その親プロセスとしてシステムプロセスが設定されているため、代理親プロセスが使用していたリソース解放などが行われなくなることを回避することができる。
【００３３】
代理親プロセスは親プロセスの子プロセスとして登録されているため、代理親プロセスが異常終了したときには、他の子プロセスと同様に、親プロセスにより代理親プロセスが再起動される。
【００３４】
なお、親プロセスＰＰが異常終了したとき、代理親プロセスの代理親プロセスとして、図９に示すように、システムプロセスＳＰが再起動した親プロセスＰＰを用いるようにしてもよい。また、親プロセスＰＰが異常終了したとき、代理親プロセスの代理親プロセスとして、図１０に示すように、代理親プロセスに対して親プロセスＰＰが異常終了したことを通知する仕組みを組み込み、この通知を受けた代理親プロセスが生成したプロセスＡＰを用いるようにしてもよい。
【００３５】
次に、図１１に示すように、親プロセスＰＰに子プロセスＣＰ1〜ＣＰ3が関連付けられたアプリケーションを前提として、オペレーティングシステムで処理される具体的な事例について考察する。なお、子プロセスＣＰ3が代理親プロセスとして機能するものとする。
【００３６】
（Ａ）親プロセスＰＰが子プロセスＣＰ1〜ＣＰ3より先に終了した場合（図１２）
アプリケーションが起動されると、親プロセスＰＰが子プロセスＣＰ1〜ＣＰ3を順次生成する。子プロセスＣＰ1及びＣＰ2は、アプリケーションの実行を開始する。次に、親プロセスＰＰは、その代理親プロセスとして子プロセスＣＰ3を設定する。その後、親プロセスＰＰは、子プロセスＣＰ1〜ＣＰ3の監視を開始する。そして、親プロセスＰＰが異常終了すると、システムプロセスＳＰは、親プロセスＰＰの異常終了を検出して、親プロセスＰＰを再起動させる。
【００３７】
一方、親プロセスＰＰが異常終了すると、前述した仕組みにより、子プロセスＣＰ1及びＣＰ2の制御テーブル４０の親プロセスに、代理親プロセスである子プロセスＣＰ3が設定される。そして、代理親プロセスである子プロセスＣＰ3は、親プロセスＰＰの終了に伴い、子プロセスＣＰ1及びＣＰ2の監視を開始する。
【００３８】
システムプロセスＳＰにより再起動された親プロセスＰＰは、代理親プロセスである子プロセスＣＰ3に対して再起動された旨の通知を行う。この通知を受けた子プロセスＣＰ3は、自分の代理親プロセスとして、再起動された親プロセスＰＰを設定する。
【００３９】
その後、子プロセスＣＰ1が終了すると、ソフトウエア割込みによるプロセス終了通知が子プロセスＣＰ3に送られ、子プロセスＣＰ3が、子プロセスＣＰ1のリソース解放及び課金情報収集などを行う。
【００４０】
（Ｂ）子プロセスＣＰ3が親プロセスＰＰより先に終了した場合（図１３）
アプリケーションが起動されると、親プロセスＰＰが子プロセスＣＰ1〜ＣＰ3を順次生成する。子プロセスＣＰ1及びＣＰ2は、アプリケーションの実行を開始する。次に、親プロセスＰＰは、その代理親プロセスとして子プロセスＣＰ3を設定する。その後、親プロセスＰＰは、子プロセスＣＰ1〜ＣＰ3の監視を開始する。
【００４１】
代理親プロセスである子プロセスＣＰ3が異常終了すると、ソフトウエア割込みによるプロセス終了通知が親プロセスＰＰに送られる。プロセス終了通知を受けた親プロセスＰＰは、代理親プロセスがなくなったことを踏まえ、ソフトウエア割込みハンドラで代理親プロセスである子プロセスＣＰ3を再度生成し、代理親プロセスに再度設定する。
【００４２】
なお、制御テーブル４０は、以上説明したデータ構造を採用しなくとも、親プロセスＰＰと子プロセスＣＰとの親子関係を定義できればよい。
以上の実施形態に関し、更に以下の付記を開示する。
【００４３】
（付記１）親プロセス及び子プロセスの親子関係を定義するメモリ上の制御テーブルに基づいてプロセスを管理するプロセス管理プログラムにおいて、コンピュータを、前記親プロセスの代理親プロセスを登録する代理親登録手段、前記親プロセスの異常終了を検出するプロセス終了検出手段、前記プロセス終了検出手段により親プロセスの異常終了が検出されたとき、前記代理親プロセスが子プロセスの親プロセスになるように、前記制御テーブルの親子関係を更新する制御テーブル更新手段、として機能させることを特徴とするプロセス管理プログラム。
【００４４】
（付記２）前記代理親プロセスは、前記制御テーブルにおいて、前記子プロセスの１つとして登録されていることを特徴とする付記１記載のプロセス管理プログラム。
【００４５】
（付記３）前記制御テーブル更新手段は、前記制御テーブルの親子関係を更新するとき、システムプロセスにより再起動された親プロセスを、前記親プロセスとして機能する代理親プロセスの代理親プロセスとして登録することを特徴とする付記１又は付記２に記載のプロセス管理プログラム。
【００４６】
（付記４）前記制御テーブル更新手段は、前記制御テーブルの親子関係を更新するとき、前記代理親プロセスにより生成された代理プロセスを、前記親プロセスとして機能する代理親プロセスの代理親プロセスとして登録することを特徴とする付記１又は付記２に記載のプロセス管理プログラム。
【００４７】
（付記５）前記制御テーブル更新手段は、前記制御テーブルに代理親プロセスが登録されていないとき、システムプロセスを代理親プロセスとして選定することを特徴とする付記１〜付記４のいずれか１つに記載のプロセス管理プログラム。
【００４８】
（付記６）親プロセス及び子プロセスの親子関係を定義するメモリ上の制御テーブルに基づいてプロセスを管理するプロセス管理方法において、コンピュータが、前記親プロセスの代理親プロセスを登録すると共に、前記親プロセスの異常終了を検出したとき、前記代理親プロセスが子プロセスの親プロセスになるように、前記制御テーブルの親子関係を更新することを特徴とするプロセス管理方法。
【００４９】
（付記７）親プロセス及び子プロセスの親子関係を定義するメモリ上の制御テーブルに基づいてプロセスを管理するプロセス管理プログラムを記録したコンピュータ読取可能な記録媒体において、コンピュータを、前記親プロセスの代理親プロセスを登録する代理親登録手段、前記親プロセスの異常終了を検出するプロセス終了検出手段、前記プロセス終了検出手段により親プロセスの異常終了が検出されたとき、前記代理親プロセスが子プロセスの親プロセスになるように、前記制御テーブルの親子関係を更新する制御テーブル更新手段、として機能させることを特徴とするプロセス管理プログラムを記録したコンピュータ読取可能な記録媒体。
【符号の説明】
【００５０】
１０  コンピュータ
２０  プロセス終了検出部
３０  制御テーブル更新部
４０  制御テーブル
ＰＰ  親プロセス
ＣＰ  子プロセス
ＡＰ  代理プロセス
【図１】
0005446666.tif 000002
【図２】
0005446666.tif 000003
【図３】
0005446666.tif 000004
【図４】
0005446666.tif 000005
【図５】
0005446666.tif 000006
【図６】
0005446666.tif 000007
【図７】
0005446666.tif 000008
【図８】
0005446666.tif 000009
【図９】
0005446666.tif 000010
【図１１】
0005446666.tif 000011
【図１２】
0005446666.tif 000012
【図１３】
0005446666.tif 000013
【図１０】
0005446666.tif 000014