(57)【特許請求の範囲】
【請求項１】
少なくとも１つの業務アプリケーションを稼動可能なクライアント（クライアントコンピュータ）およびサーバ（サーバコンピュータ）が通信ネットワークを介して通信可能に接続されたクライアント／サーバシステムにおいて、
前記クライアント上で実行される業務アプリケーションが業務開始、業務処理実行、業務終了などの稼動に応じて発行する業務ログデータをサーバに送信する機能を有し、前記サーバが前記業務ログデータを業務ログファイルとして蓄積するための記憶装置および各種テーブルを記憶するためのメモリを有し、
前記業務ログデータはクライアント名、業務アプリケーション名または番号、業務開始・業務処理実行・業務終了などのログ種別、登録日時などから構成され、
前記業務アプリケーションが上位下位の起動階層関係を持ち、
前記サーバ上で実行されるクライアント稼動状態把握用プログラムが、
（１）前記クライアントの業務アプリケーション業務開始ログを前記業務ログファイルから業務ログデータのログ種別により検知した時、前記クライアントが稼動状態であると判定し、前記サーバのメモリ上のクライアント稼動状態テーブルに前記業務アプリケーションが稼動中として記録し、
前記クライアントの業務アプリケーション業務終了ログを前記業務ログファイルから業務ログデータのログ種別により検知した時、前記サーバのメモリ上のクライアント稼動状態テーブルに当該業務アプリケーションが非稼動中として記録する機能を有し、
（２）前記サーバのメモリ上のクライアント稼動状態テーブルに前記クライアントに関する稼動中の業務アプリケーションが１件以上記録されている場合、前記クライアントが稼動中と判断して前記サーバのメモリ上のクライアント稼動状態テーブルに当該クライアントの状態を稼動中として設定し、
前記サーバのメモリ上のクライアント稼動状態テーブルに前記クライアントに関する稼動中の業務アプリケーションが１件も記録されていない場合、前記クライアントが非稼動中と判断して前記サーバのメモリ上のクライアント稼動状態テーブルに当該クライアントの状態を非稼動中と設定する機能を有し、
（３）前記業務アプリケーション名に対する上位階層の業務アプリケーション名を記録した前記クライアントの業務アプリケーションの起動階層テーブルを前記サーバのメモリ上に有し、
前記上位階層の業務アプリケーションの業務終了ログを前記業務ログファイルから業務ログデータのログ種別により検知した場合、
前記業務アプリケーションの起動階層テーブルを参照し、
前記業務アプリケーションの下位階層の業務アプリケーション名を取得し、前記サーバのメモリ上のクライアント稼動状態テーブルにおける当該下位階層の業務アプリケーションの状態を非稼動中に更新する機能を有し、
（４）前記サーバのメモリ上のクライアント稼動状態テーブルにおいて起動階層構造を成す複数の業務アプリケーションを稼動状態に設定している際に、再度、その上位階層の業務アプリケーションの業務開始ログを前記業務ログファイルから業務ログデータのログ種別により検知した場合、
前記業務アプリケーションの起動階層テーブルを参照し、
前記業務アプリケーションの下位階層の業務アプリケーション名を取得し、
前記サーバのメモリ上のクライアント稼動状態テーブルにおいてその上位階層の業務アプリケーションより下位階層の業務アプリケーションの稼動状態を非稼動状態に設定する機能を有し、
前記各機能を前記クライアントおよびサーバの少なくとも一方に備えてクライアント／サーバのコンピュータを実行させることを特徴とするクライアント稼動状態把握用プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、少なくとも１つの業務アプリケーションを稼動可能なクライアントおよびサーバが通信ネットワークを介して通信可能に接続されたクライアント／サーバシステムにおいて、クライアントの稼動状態を把握するためのクライアント稼動状態把握システム、およびクライアント稼動状態把握用プログラムに関する。
【０００２】
【従来の技術】
クライアント（クライアントコンピュータ）とサーバ（サーバコンピュータ）とが通信ネットワークで通信可能に接続されて構成されたクライアント／サーバシステムにおいて、そのクライアントの稼動状態をサーバ側において把握するためには、一般的に次の機構（プログラムおよびそのプログラムに対応する機能）をサーバ側とクライアント側にそれぞれ組込まなければならない。
【０００３】
すなわち、クライアント側においては、自クライアントの稼動状態を検出する機構と稼動状態のサーバに対する前記稼動状態を通信する機構とを組み込まなければならず、また、サーバ側においては、稼動状態のクライアントに対する通信機構を組み込まなければならない。
【０００４】
また、クライアント側において、自クライアントの稼動状態をサーバに通知する方法として、以下に示す方法がある。
【０００５】
すなわち、第１の方法として、クライアント側から定期的に稼動状態をサーバ側に通知する方法、第２の方法として、クライアント側の稼動状態の変化時に、クライアント側から稼動状態をサーバ側に通知する方法、第３の方法として、サーバ側から稼動状態の送信要求がクライアント側に送信された際に、クライアント側からサーバ側に稼動状態を通知する方法等がある。
【０００６】
上述した第１〜第３の方法は、クライアントの状態管理の目的に応じて使い分けられている。
【０００７】
【発明が解決しようとする課題】
しかしながら、従来のクライアント稼動状態把握方法では、クライアント側に稼動状態検出機構およびサーバとの稼動状態通信機構、サーバ側にクライアントとの稼動状態通信機構をそれぞれ特別に組み込まなければならないため、クライアント自体およびサーバ自体に組み込まれた機構に基づく処理負荷および稼動状態通信に基づく通信路（通信回線）への処理負荷をそれぞれかける結果となり、クライアントの本来の業務アプリケーション処理の速度およびクライアントとサーバとの間の通信路を介した通信速度をそれぞれ低下させる恐れが生じていた。
【０００８】
また、従来のクライアントの稼動状態をサーバに通知する第１〜第３の方法の何れを採用した場合でも、クライアント側およびサーバ側それぞれのＣＰＵの負荷がかかるとともに、サーバおよびクライアント間の通信路の負荷もかかるため、上述したクライアントの業務アプリケーションの処理速度およびサーバとの通信路を介した処理速度をそれぞれ低下させる恐れが生じていた。
【０００９】
本発明は上述した事情に鑑みてなされたもので、クライアント側に稼動状態の検出機構、サーバとの稼動状態の通信機構を特別に組み込むことなく、通常の業務アプリケーション実行過程により発生する業務ログを利用することにより、クライアントの稼動状態を把握することを可能にしたクライアント稼動状態把握システム、およびクライアント稼動状態把握用プログラムを提供することをその目的とする。
【００１０】
【課題を解決するための手段】
上述した課題を解決するために、本発明の第１の態様によれば、少なくとも１つの業務アプリケーションを稼動可能なクライアント（クライアントコンピュータ）およびサーバ（サーバコンピュータ）が通信ネットワークを介して通信可能に接続されたクライアント／サーバシステムにおいて、
前記クライアント上で実行される業務アプリケーションが業務開始、業務処理実行、業務終了などの稼動に応じて発行する業務ログデータをサーバに送信する機能を有し、前記サーバが前記業務ログデータを業務ログファイルとして蓄積するための記憶装置および各種テーブルを記憶するためのメモリを有し、
前記業務ログデータはクライアント名、業務アプリケーション名または番号、業務開始・業務処理実行・業務終了などのログ種別、登録日時などから構成され、
前記業務アプリケーションが上位下位の起動階層関係を持ち、
前記サーバ上で実行されるクライアント稼動状態把握用プログラムが、
（１）前記クライアントの業務アプリケーション業務開始ログを前記業務ログファイルから業務ログデータのログ種別により検知した時、前記クライアントが稼動状態であると判定し、前記サーバのメモリ上のクライアント稼動状態テーブルに前記業務アプリケーションが稼動中として記録し、
前記クライアントの業務アプリケーション業務終了ログを前記業務ログファイルから業務ログデータのログ種別により検知した時、前記サーバのメモリ上のクライアント稼動状態テーブルに当該業務アプリケーションが非稼動中として記録する機能を有し、
（２）前記サーバのメモリ上のクライアント稼動状態テーブルに前記クライアントに関する稼動中の業務アプリケーションが１件以上記録されている場合、前記クライアントが稼動中と判断して前記サーバのメモリ上のクライアント稼動状態テーブルに当該クライアントの状態を稼動中として設定し、
前記サーバのメモリ上のクライアント稼動状態テーブルに前記クライアントに関する稼動中の業務アプリケーションが１件も記録されていない場合、前記クライアントが非稼動中と判断して前記サーバのメモリ上のクライアント稼動状態テーブルに当該クライアントの状態を非稼動中と設定する機能を有し、
（３）前記業務アプリケーション名に対する上位階層の業務アプリケーション名を記録した前記クライアントの業務アプリケーションの起動階層テーブルを前記サーバのメモリ上に有し、
前記上位階層の業務アプリケーションの業務終了ログを前記業務ログファイルから業務ログデータのログ種別により検知した場合、
前記業務アプリケーションの起動階層テーブルを参照し、
前記業務アプリケーションの下位階層の業務アプリケーション名を取得し、前記サーバのメモリ上のクライアント稼動状態テーブルにおける当該下位階層の業務アプリケーションの状態を非稼動中に更新する機能を有し、
（４）前記サーバのメモリ上のクライアント稼動状態テーブルにおいて起動階層構造を成す複数の業務アプリケーションを稼動状態に設定している際に、再度、その上位階層の業務アプリケーションの業務開始ログを前記業務ログファイルから業務ログデータのログ種別により検知した場合、
前記業務アプリケーションの起動階層テーブルを参照し、
前記業務アプリケーションの下位階層の業務アプリケーション名を取得し、
前記サーバのメモリ上のクライアント稼動状態テーブルにおいてその上位階層の業務アプリケーションより下位階層の業務アプリケーションの稼動状態を非稼動状態に設定する機能を有し、
前記各機能を前記クライアントおよびサーバの少なくとも一方に備えてクライアント／サーバのコンピュータを実行させることを特徴とするものである。
【００１４】
【発明の実施の形態】
以下、本発明のクライアント稼動状態把握システム、およびクライアント稼動状態把握用プログラムの実施の形態について図面を参照して説明する。
【００１５】
（第１の実施の形態）
図１は、本発明の第１の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステム１の概略構成を示すブロック図である。
【００１６】
図１に示すように、クライアント／サーバシステム１は、本実施の形態に係るクライアント稼動状態把握システムを機能として含み、後述するクライアントに対してサービスを提供するためのサーバ１０を備えており、このサーバ１０は、ＣＰＵ、メモリ等を含むコンピュータである。
【００１７】
サーバ１０は、そのメモリに、クライアント／サーバシステムを構築する分散コンピュータ環境の基盤ソフトウエア（プラットフォーム）であるミドルウエアを含むプログラムＰ１を保持しており、このプログラムＰ１に従って、以下に示すプロセス（手段）をクライアント／サーバシステムのコンピュータが実行するようになっている。
【００１８】
すなわち、サーバ１０は、プログラムＰ１により、通信ネットワークＮを介したクライアントとの通信用の通信プロセス１１と、クライアントの１件分の業務ログデータ（以下、簡単に業務ログと記載する）１４をファイル１３に書き込んで登録するための業務ログ登録プロセス１２と、業務ログ１４に基づいてクライアント稼動状態を検出し、必要に応じてクライアント稼動状態テーブル１６を更新するクライアント稼動状態検出プロセス１５として機能するようになっている。
【００１９】
一方、クライアント／サーバシステム１は、サーバ１０に対してサービスを要求するための複数のクライアント（図１では、３つのクライアント♯１、♯２、♯３（２０、３０、４０）とする）を備えており、各クライアント♯１（２０）〜♯３（４０）は、ＣＰＵ、メモリ、ディスプレイ、入力部等を含むコンピュータである。
【００２０】
各クライアント♯１（２０）〜♯３（４０）は、そのメモリに、クライアント／サーバシステムを構築する分散コンピュータ環境の基盤ソフトウエア（プラットフォーム）であるミドルウエアおよび複数の業務アプリケーション（プログラム；図面では、“業務アプリ”と略記する）Ｘ〜Ｗを含むプログラムＰ２を保持しており、このプログラムＰ２に従って、以下に示すプロセス（手段）をクライアント／サーバシステムのコンピュータが実行するようになっている。
【００２１】
例えば、すなわち、クライアント♯１（２０）は、プログラムＰ２に従って、通信ネットワークＮを介したサーバ１０との通信用の通信プロセス２１と、業務アプリケーションＸに基づく業務アプリケーションプロセスＸ（２２）と、業務アプリケーションＹに基づく業務アプリケーションプロセスＹ（２３）と、業務アプリケーションＺに基づく業務アプリケーションプロセスＺ（２４）と、業務アプリケーションＷに基づく業務アプリケーションプロセスＷ（２５）としてそれぞれ機能するようになっている。
【００２２】
なお、他のクライアント♯２（３０）〜♯３（４０）についても、クライアント♯１（２０）と略同等の機能構成を有している。
【００２３】
さらに、クライアント／サーバシステム１は、通信ネットワークＮを介してサーバ１０と通信可能であり、サーバ１０におけるクライアント運用管理を監視するための運用管理端末（ＣＰＵ、メモリ、ディスプレイ、操作部等を有するコンピュータ）１００を備えており、この運用管理端末１００は、オペレータの指示、または予め定められた周期に応じて、サーバ１０内のクライアント稼動状態テーブル１６を参照し、その画面上にクライアントの稼動状態を表示可能になっている。
【００２４】
なお、本明細書において、“業務ログデータ（業務ログ）”とは、業務アプリケーションを実行する過程で発生するメッセージデータを意味し、業務アプリケーションの開始を表す業務開始ログデータ、業務アプリケーションに基づく各処理の内容を表す処理ログデータ、業務アプリケーションの終了を表す業務終了ログデータ、業務アプリケーションの立上を表す業務立上ログデータ等があり、これらの業務ログデータは、各クライアント♯１（２０）〜♯３（２２）側において発行される毎に、１件ずつサーバ１０へ送信されるようになっている。
【００２５】
図２は、本実施形態における１件分の業務ログ１４のデータ構成を概念的に示す図である。
【００２６】
図２に示すように、業務ログ１４は、対応するクライアントの識別情報としてのクライアント名１４Ｃ、対応する業務アプリケーション名１４Ｎ、後述するメッセージの内容に対応するメッセージ番号１４Ｂおよびメッセージ内容を表すメッセージ文字列１４Ｍから構成されている。
【００２７】
以下、本実施形態の全体処理について、特に、サーバ１０のクライアント稼動状態検出プロセス１５を中心に説明する。
【００２８】
クライアント♯１（２０）〜クライアント♯３（４０）の少なくとも１つのクライアントが複数の業務アプリケーションプロセスＸ（２２）〜Ｗ（２５）の内の少なくとも１つの業務アプリケーションプロセスを実行する過程において、対応クライアントの処理により発行された業務ログ１４は、そのクライアントの通信プロセス２１により、発行される毎（すなわち、１件ずつ）に通信ネットワークＮを介してサーバ１０に送信される。
【００２９】
このとき、サーバ１０の通信プロセス１１は、通信ネットワークＮを介して送信されてきた業務ログ１４を受信して、その業務ログ１４を業務ログ登録プロセス１２に渡し（例えば、メモリを介したデータの書込み・読出しにより次のプロセス１２がデータを取得する過程を意味する、以下同様）、業務ログ登録プロセス１２は、渡された業務ログ１４を登録日時を含むレコードとして業務ログファイル１３に書き込むことにより、業務ログ１４を登録し、次いで、１件分の業務ログ１４をクライアント稼動状態検出プロセス１５に渡す。
【００３０】
図３は、業務ログファイル１３の構成例を示す図であり、図３に示すように、業務ログ１４は、順次第１レコード、第２レコード、・・・として業務ログファイル１３に書き込まれる（登録される）。
【００３１】
クライアント稼動状態検出プロセス１５は、登録プロセス１２が業務ログ１４を業務ログファイル１３に登録するタイミングで起動し、登録プロセス１２から渡された業務ログ１４を受け取り、以下に示す動作を実行する。
【００３２】
すなわち、サーバ１０のクライアント稼動状態検出プロセス１５は、登録プロセス１２により渡された１件分の業務ログ１４を受取り（メモリから読出し）、クライアント名１４Ｃ、業務アプリケーション名１４Ｎ、メッセージ番号１４Ｂおよびメッセージ文字列１４Ｍを取得する（ステップＳ１）。
【００３３】
次いで、プロセス１５は、業務ログ１４のメッセージ番号１４Ｂを調べて、業務開始の業務ログ（業務開始ログ）かどうかを判定する（ステップＳ２）。
【００３４】
このステップＳ２の判断により、業務ログ１４が業務開始の場合、次ステップＳ３に進み、そうでなければステップＳ１０へ進む。
【００３５】
なお、ステップＳ２における業務ログの内容が業務開始、業務終了かどうかを判定する方法としては、メッセージ番号の他にメッセージの文字列を判定する方法もあるが、ここでは、メッセージ番号による方法について説明する。
【００３６】
ステップＳ２の判定がＹＥＳ（業務ログ→業務開始ログ）である場合、プロセス１５は、業務ログ１４のクライアント名１４Ｃとなるレコードはクライアント稼動状態テーブル１６に既に書き込まれているか否か判断する。
【００３７】
図４は、クライアント稼動状態テーブル１６の構成例を示す図である。
【００３８】
図４に示すように、クライアント稼動状態テーブル１６には、稼動状態のクライアント名１６１Ｃ、クライアントの状態（稼動中／非稼動）を表すデータ１６１Ｓ、そのクライアント作業中の業務アプリケーション名１（１６１Ｎ１）〜作業中の業務アプリケーション名４（１６１Ｎ４）が順次第１レコード、第２レコード、・・・として記憶されている。
【００３９】
すなわち、プロセス１５は、クライアント稼動状態テーブル１６の第１レコード１６１のクライアント名１６１Ｃ、第２レコード１６２のクライアント名１６２Ｃ、第３レコード１６３クライアント名１６３Ｃ、・・・を順に調べ、クライアント名１６ｉＣ（ｉ＝１、２、・・・）とクライアント名１４Ｃとが一致するレコード１６ｉが存在するかどうか判断する（ステップＳ３）。
【００４０】
このステップＳ３の判断により、条件を満たすレコード１６ｉＣが存在する場合（ステップＳ３→ＹＥＳ）、ステップＳ７に進み、存在しない場合（ステップＳ３→ＮＯ）、次ステップＳ４へ進む。
【００４１】
なお、ステップＳ３の判断がＹＥＳ（ステップＳ７に進む）場合は、業務ログ１４に対応するクライアントでは他の業務アプリケーションが稼動中の場合（その業務アプリケーションの業務ログ１４に応じて、テーブル１６に既にレコードが存在する場合）である。
【００４２】
ステップＳ４に進んだプロセス１５は、対応するクライアントで初めて業務アプリケーションが稼動した場合であり、クライアント稼動状態テーブル１６の第１レコード１６１、第２レコード１６２、第３レコード１６３、・・・を順に調べ、未使用のレコード（空きレコード；クライアント名１６ｉＣ＝０（クリア値））を探す（ステップＳ４）。
【００４３】
本実施形態において、例えば空きレコードが第２レコード１６２であったとする。
【００４４】
このとき、プロセス１５は、クライアント稼動状態テーブル１６の空きレコード（第２レコード１６２）内のクライアント名および作業中の業務アプリケーション名に業務ログ１４に指示された値（データ）を書き込む。
【００４５】
すなわち、空きレコードが第２レコード１６２である場合に、プロセス１５は、第２レコード１６２の全領域をクリアし、その第２レコード１６２のクライアント名１６２Ｃとしてクライアント名１４Ｃに対応する値を書込み、作業中の業務アプリケーション名１（１６２Ｎ１）として業務アプリケーション名１４Ｎに対応する値を書き込む（ステップＳ５）。
【００４６】
次いで、プロセス１５は、クライアント稼動状態テーブル１６の該当レコード（第２レコード１６２）のクライアントの状態を「稼動中」、すなわち、クライアントの状態１６２Ｓに対して、「稼動中」を意味する値（データ）を書き込んで処理を終了する。
【００４７】
一方、ステップＳ３の判断がＹＥＳ、すなわち、クライアント名１６ｉＣとクライアント名１４Ｃとが一致するレコード１６ｉが存在する場合（業務ログ１４に対応するクライアントにおいて他の業務アプリケーションが稼動中の場合）、プロセス１５は、業務ログ１４で指示された業務アプリケーション名がクライアント稼動状態テーブル１６の該当するレコード１６ｉの作業中の業務アプリケーション名に書き込まれているか否かを判断する。
【００４８】
すなわち、例えば、該当レコード１６ｉが第２レコード１６２であると仮定すると、プロセス１５は、第２レコード１６２の作業中の業務アプリケーション名１（１６２Ｎ１）、作業中の業務アプリケーション名２（１６２Ｎ２）、作業中の業務アプリケーション名３（１６２Ｎ３）、・・・を順に調べ、業務アプリケーション名１４Ｎと一致するものを探し、探した結果、業務ログ１４に対応する業務アプリケーション１４Ｎに一致するレコードが存在するか否か判断する（ステップＳ７）。
【００４９】
このステップＳ７の判断により、一致するレコードがある場合には、業務開始ログであるにも係らず、対応する業務アプリケーションのレコードが存在することになり、正常に運用されていないものと判断して処理を終了する。
【００５０】
この非正常運用としては、例えば、クライアント側である業務アプリケーションを開始した後、クライアント側に障害が発生し、業務終了の業務ログがサーバ側に通知されない状態でクライアント側が再度業務アプリケーションを開始した場合である。
【００５１】
一方、ステップＳ７の判断により、一致するレコードが無い場合には、ステップＳ７の判断はＮＯとなり、プロセス１５は、クライアント稼動状態テーブル１６の該当レコード内の業務アプリケーション名に業務ログ１４で指示された値を書き込む。
【００５２】
すなわち、該当レコードが第２レコード１６２である場合には、プロセス１５は、第２レコード１６２の作業中の業務アプリケーション名１（１６２Ｎ１）、作業中の業務アプリケーション名２（１６２Ｎ２）、作業中の業務アプリケーション名３（１６２Ｎ３）、・・・を順に調べ、未使用（作業中の業務アプリケーション名＝０）のものを探す。
【００５３】
このとき、例えば、作業中の業務アプリケーション名１（１６２Ｎ１）が未使用であった場合には、プロセス１５は、作業中の業務アプリケーション名１（１６２Ｎ１）に、業務アプリケーション名１４Ｎに対応する値を書き込む（ステップＳ８）。
【００５４】
次いで、プロセス１５は、クライアント稼動状態テーブル１６の該当レコード内のクライアント状態を「稼動中」、すなわち、クライアントの状態１６２Ｓに対して、「稼動中」を意味する値（データ）を書き込んで処理を終了する。
【００５５】
一方、ステップＳ２の判断がＮＯ、すなわち、業務ログが業務開始ログでない場合、プロセス１５は、業務ログ１４のメッセージ番号１４Ｂを調べて、業務終了の業務ログ（業務終了ログ）かどうかを判定する（ステップＳ１０）。
【００５６】
このステップＳ１０の判断により、業務ログ１４が業務終了ではない場合（ステップＳ１０→ＮＯ）、すなわち、業務ログ１４が業務開始ログおよび業務終了ログの何れでもない場合、クライアント稼動状態検出プロセス１５にとって不必要な業務ログであると判断して処理を終了する。
【００５７】
一方、ステップＳ１０の判断により、業務ログ１４が業務終了の場合（ステップＳ１０→ＹＥＳ）、プロセス１５は、業務ログ１４のクライアント名１４Ｃに対応したクライアント稼動状態テーブル１６に置けるレコードを探す。
【００５８】
すなわち、プロセス１５は、クライアント稼動状態テーブル１６の第１レコード１６１のクライアント名１６１Ｃ、第２レコード１６２のクライアント名１６２Ｃ、第３レコード１６３のクライアント名１６３Ｃ、・・・を順次調べ、クライアント名１６ｉＣとクライアント名１４Ｃとが一致するレコード１６ｉを探す（ステップＳ１１）。
【００５９】
例えば、第２レコード１６２において、クライアント名１６ｉＣとクライアント名１４Ｃとが一致した場合、プロセス１５は、クライアント稼動状態テーブル１６の該当レコード内の作業中の業務アプリケーション名のうち業務ログ１４で指示された業務アプリケーション名と一致するものをクリア（消去）する。
【００６０】
例えば、該当レコードが第２レコード１６２である場合には、プロセス１５は、作業中の業務アプリケーション名１（１６２Ｎ１）、作業中の業務アプリケーション名２（１６２Ｎ２）、作業中の業務アプリケーション名３（１６２Ｎ３）、・・・を順次調べ、業務アプリケーション名１４Ｎと一致するものを探す。
【００６１】
そして、例えば、作業中の業務アプリケーション名１（１６２Ｎ１）が業務アプリケーション名１４Ｎに一致する際において、プロセス１５は、作業中の業務アプリケーション名１（１６２Ｎ１）に対応する値をテーブル１６から消去（すなわち、クリアに対応する値“０”を書き込む）する（ステップＳ１２）。
【００６２】
次いで、プロセス１５は、クライアント稼動状態テーブル１６の該当レコード内の作業中の業務アプリケーション名が１件以上書き込まれているか否か判断する（ステップＳ１３）。
【００６３】
例えば、該当レコードが第２レコード１６２である場合では、プロセス１５は、作業中の業務アプリケーション名１（１６２Ｎ１）、作業中の業務アプリケーション名２（１６２Ｎ２）、作業中の業務アプリケーション名３（１６２Ｎ３）、・・・を順次調べ、業務アプリケーション名が書き込まれている（≠０）の業務アプリケーション名の件数を計算し、件数が１件以上であれば、ステップＳ１３の判断はＹＥＳ、すなわち、他の業務アプリケーションが稼動中であり、業務終了ログに対応するクライアントはまだ稼動中であるため、処理を終了する。
【００６４】
一方、ステップＳ１３の判断の結果、ＮＯ、すなわち、業務終了ログ１４に対応するクライアントにおいて、稼動中の業務アプリケーションが存在しないため、プロセス１５は、対応するクライアントの状態を「非稼動」、すなわち、クライアントの状態１６２Ｓに対して、「非稼動」を意味する値（データ）を書き込んで処理を終了する。
【００６５】
図７は、上述したステップＳ１〜ステップＳ１４の処理に基づくクライアント稼動状態の検出結果を示す図である。
【００６６】
すなわち、例えば、最初の業務ログ１４（Ｎｏ．１）として、クライアント♯１（２０）における業務アプリケーションＸの業務開始ログ１４がクライアント業務ログファイル１３に登録されると、クライアント♯１（２０）のレコードはまだクライアント稼動状態テーブル１６には書き込まれていないため、ステップＳ２の判断→ＹＥＳ、ステップＳ３の判断→ＮＯとなり、ステップＳ４〜ステップＳ６の処理により、クライアント稼動状態テーブル１６における所定のレコードには、業務開始ログ１４に基づいて、クライアント♯１（２０）および業務アプリケーションＸが稼動中（作業中）であることを表す値（業務名を表す値）がそれぞれ書き込まれる。
【００６７】
次いで、２番目の業務ログ１４（Ｎｏ．２）として、クライアント♯１（２０）における業務アプリケーションＹの業務開始ログ１４がクライアント業務ログファイル１３に登録されると、今度は、クライアント稼動状態テーブル１６の所定のレコードに、クライアント♯１（２０）のクライアント名に対応する値が書き込まれているため、ステップＳ２の判断→ＹＥＳ、ステップＳ３の判断→ＹＥＳとなり、業務アプリケーションＹが稼動中であることを表す値（業務名を表す値）が所定のレコードに書き込まれる。
【００６８】
一方、クライアント稼動状態テーブル１６の所定のレコードに、クライアント♯１（２０）の稼動状態を表す値、業務アプリケーションＸおよび業務アプリケーションＹが稼動中であることを表す値がそれぞれ書き込まれている状態において、９番目の業務ログ１４（Ｎｏ．９）として、クライアント♯１（２０）における業務アプリケーションＹの業務終了ログ１４がクライアント業務ログファイル１３に登録されると、ステップＳ２の判断→ＮＯ、ステップＳ１０の判断→ＹＥＳとなり、ステップＳ１１〜ステップＳ１３の処理により、クライアント稼動状態テーブル１６の所定のレコードにおける業務アプリケーションＹの稼動中を表す値がクリアされる。
【００６９】
このようにして、クライアント稼動状態テーブル１６の所定のレコードに業務アプリケーションＸが稼動中であることを表すデータが書き込まれている状態において、１０番目の業務ログ１４（Ｎｏ．１０）として、クライアント♯１（２０）における業務アプリケーションＸの業務終了ログ１４がクライアント業務ログファイル１３に登録されると、ステップＳ２の判断→ＮＯ、ステップＳ１０の判断→ＹＥＳとなり、ステップＳ１１〜ステップＳ１３の処理により、クライアント稼動状態テーブル１６の所定のレコードにおける業務アプリケーションＸの稼動中を表す値がクリアされる。
【００７０】
このとき、所定のレコードに存在するクライアント♯１（２０）に対応する所定レコードにおいて、業務アプリケーションの稼動中を表す値が全てクリア（０）になったため、ステップＳ１３の判断はＮＯとなり、クライアント♯１（２０）の状態が非稼動状態であることが検知される。
【００７１】
以上、詳述したように、本実施形態によれば、クライアントの業務アプリケーション実行過程において発行される業務ログ１４に基づいて、その業務ログ１４に対応するクライアントの稼動状態（稼動中か、非稼動状態か）を容易に検出・把握することができる。
【００７２】
（第２の実施の形態）
図８は、本発明の第２の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステム１ａの概略構成を示すブロック図である。
【００７３】
図８に示すクライアント／サーバシステム１ａにおいて、クライアントから送信される１件分の業務ログ１４ａの内容、サーバ１０の業務ログファイル１３ａ、サーバ１０のクライアント稼動状態検出プロセス１５ａ、サーバ１０のクライアント稼動状態テーブル１６ａおよびクライアントの業務アプリケーションプロセスＸ−１（２２ａ１）、業務アプリケーションプロセスＸ−２（２２ａ２）、業務アプリケーションプロセスＹ−１（２３ａ１）、業務アプリケーションプロセスＹ−２（２３ａ２）がそれぞれ第１実施形態と異なっている。なお、その他の構成については、第１実施形態の構成と略同等であるため、同一の構成要素については、同一の符号を付してその説明を省略または簡略化する。
【００７４】
すなわち、業務アプリケーションプロセスＸ（２２）は、対応するクライアントのマルチタスク処理時における個々の業務アプリケーションプロセスＸ−１（枝番号１）、Ｘ−２（枝番号２）を有し、同様に、業務アプリケーションプロセスＹ（２３）は、対応するクライアントのマルチタスク処理時における個々の業務アプリケーションプロセスＹ−１（枝番号１）、Ｙ−２（枝番号２）を有している。
【００７５】
図９は、本実施形態における１件分の業務ログ１４ａのデータ構成を概念的に示す図である。
【００７６】
図９に示すように、業務ログ１４ａは、第１実施形態と同様のクライアント名１４Ｃ、業務アプリケーション名１４Ｎ、メッセージ番号１４Ｂおよびメッセージ文字列１４Ｍに加えて、マルチタスク時の枝番号を表すデータ１４Ｋを含んでいる。
【００７７】
図１０は、本実施形態の業務ログファイル１３ａの構成例を示す図であり、図１０に示すように、業務ログ１４ａは、順次第１レコード１３１、第２レコード１３２、・・・として業務ログファイル１３ａに書き込まれる（登録される）。
【００７８】
図１１は、本実施形態のクライアント稼動状態テーブル１６ａの構成例を示す図である。
【００７９】
図１１に示すように、クライアント稼動状態テーブル１６ａには、稼動状態のクライアント名１６１Ｃ、クライアントの状態（稼動中／非稼動）を表すデータ１６１Ｓ、そのクライアント作業中の業務アプリケーション名１（１６１Ｎ１）およびその枝番号（１６１Ｋ１）〜作業中の業務アプリケーション名４（１６１Ｎ４）およびその枝番号（１６１Ｋ４）が順次第１レコード１６１、第２レコード１６２、・・・として記憶されている。
【００８０】
一方、本実施形態におけるクライアント稼動状態検出プロセス１５ａは、登録プロセス１２が業務ログ１４ａを業務ログファイル１３ａに登録するタイミングで起動し、登録プロセス１２から渡された業務ログ１４ａを受け取り、以下に示す動作を実行する。
【００８１】
すなわち、サーバ１０のクライアント稼動状態検出プロセス１５ａは、前掲図５に示すステップＳ１〜ステップＳ４の処理（但し、業務ログは１４ａ）を実行した後（対応するクライアントで初めて業務アプリケーションが稼動したと判断され、未使用のレコード（例えば、第２レコード１６２）を探した後）において、クライアント稼動状態テーブル１６ａの空きレコード（第２レコード１６２）内のクライアント名、作業中の業務アプリケーション名および作業中の業務アプリ名の枝番号に業務ログ１４に指示された値（データ）を書き込む。
【００８２】
すなわち、空きレコードが第２レコード１６２である場合に、プロセス１５ａは、第２レコード１６２の全領域をクリアし、その第２レコード１６２のクライアント名１６２Ｃとしてクライアント名１４Ｃに対応する値を書込み、作業中の業務アプリケーション名１（１６２Ｎ１）として業務アプリケーション名１４Ｎに対応する値を書き込み、さらに、作業中の業務アプリケーション名１（１６２Ｎ１）の枝番号１６２Ｋ１に、マルチタスク時の業務アプリケーション名の枝番号１４Ｋを書き込む（ステップＳ５ａ）。
【００８３】
次いで、ステップＳ６の処理が行なわれて、対応するクライアントの状態が「稼動中」に設定される。
【００８４】
一方、ステップＳ３の判断がＹＥＳ、すなわち、クライアント名１６ｉＣとクライアント名１４Ｃとが一致するレコード１６ｉが存在する場合（業務ログ１４ａに対応するクライアントにおいて他の業務アプリケーションが稼動中の場合）、プロセス１５ａは、業務ログ１４ａで指示された業務アプリケーション名、作業中の業務アプリケーション名の枝番号がクライアント稼動状態テーブル１６ａの該当するレコード１６ｉに書き込まれているか否かを判断する。
【００８５】
すなわち、例えば、該当レコード１６ｉが第２レコード１６２であると仮定すると、プロセス１５ａは、第２レコード１６２の作業中の業務アプリケーション名１（１６２Ｎ１）・作業中の業務アプリケーション名の枝番号１６２Ｋ１の組、業務アプリケーション名２（１６２Ｎ２）・作業中の業務アプリケーション名の枝番号１６２Ｋ２の組、業務アプリケーション名３（１６２Ｎ３）・作業中の業務アプリケーション名の枝番号１６２Ｋ３の組、・・・を順に調べ、業務アプリケーション名１４Ｎ・マルチタスク時の業務アプリケーション名の枝番号１４Ｋの組と一致するものを探し、探した結果、業務ログ１４ａに対応する業務アプリケーション１４Ｎ・マルチタスク時の業務アプリケーション名の枝番号１４Ｋの組に一致するレコードが存在するか否か判断する（ステップＳ７ａ）。
【００８６】
このステップＳ７ａの判断により、一致するレコードがある場合には、ステップＳ７の場合と同様に、正常に運用されていないものと判断して処理を終了する。
【００８７】
一方、ステップＳ７ａの判断により、一致するレコードが無い場合には、ステップＳ７ａの判断はＮＯとなり、プロセス１５ａは、クライアント稼動状態テーブル１６ａの該当レコード内の業務アプリケーション名に業務ログ１４ａで指示された値を書き込む。
【００８８】
すなわち、該当レコードが第２レコード１６２である場合には、プロセス１５ａは、第２レコード１６２の作業中の業務アプリケーション名１（１６２Ｎ１）、作業中の業務アプリケーション名２（１６２Ｎ２）、作業中の業務アプリケーション名３（１６２Ｎ３）、・・・を順に調べ、未使用（作業中の業務アプリケーション名＝０）のものを探す。
【００８９】
このとき、例えば、作業中の業務アプリケーション名１（１６２Ｎ１）が未使用であった場合には、プロセス１５は、作業中の業務アプリケーション名１（１６２Ｎ１）に、業務アプリケーション名１４Ｎに対応する値を書き込み、次いで、作業中の業務アプリケーション名１（１６２Ｎ１）の枝番号にマルチタスク時の業務アプリケーション名の枝番号１４Ｋを書き込む（ステップＳ８ａ）。
【００９０】
そして、ステップＳ９の処理が行なわれて、該当するレコード内の対応するクライアントの状態が「稼動中」に設定される。
【００９１】
一方、ステップＳ２の判断がＮＯ（業務ログ１４ａが業務開始ログでない）で、ステップＳ１０の判断がＹＥＳ（業務ログ１４ａが業務終了の場合（ステップＳ１０→ＹＥＳ）であり、ステップＳ１１の処理により、クライアント名１６ｉＣとクライアント名１４Ｃとが一致するレコード１６ｉ（例えば、第２レコード）が見付かった際に、プロセス１５ａは、作業中の業務アプリケーション名１（１６２Ｎ１）・作業中の業務アプリケーション名の枝番号１６２Ｋ１の組、業務アプリケーション名２（１６２Ｎ２）・作業中の業務アプリケーション名の枝番号１６２Ｋ２の組、業務アプリケーション名３（１６２Ｎ３）・作業中の業務アプリケーション名の枝番号１６２Ｋ３の組、・・・を順に調べ、業務アプリケーション名１４Ｎ・マルチタスク時の業務アプリケーション名の枝番号１４Ｋの組と一致するものを探す。
【００９２】
そして、例えば、作業中の業務アプリケーション名１（１６２Ｎ１）・作業中の業務アプリケーション名の枝番号１６２Ｋ１の組が業務アプリケーション名１４Ｎ・作業中の業務アプリケーション名の枝番号１４Ｋの組に一致する際において、プロセス１５ａは、作業中の業務アプリケーション名１（１６２Ｎ１）に対応する値をテーブル１６ａから消去（すなわち、クリアに対応する値“０”を書き込む）し、次いで、作業中の業務アプリケーション名１の枝番号１６２Ｋ１をクリアする（ステップＳ１２ａ）。
【００９３】
次いで、プロセス１５ａは、クライアント稼動状態テーブル１６ａの該当レコード内の作業中の業務アプリケーション名・作業中の業務アプリケーション名の枝番号の組が１件以上書き込まれているか否か判断する（ステップＳ１３ａ）。
【００９４】
このステップＳ１３ａの判断の結果、作業中の業務アプリケーション名・作業中の業務アプリケーション名の枝番号の組が書き込まれている（≠０）の業務アプリケーション名の件数を計算し、件数が１件以上であれば、ステップＳ１３ａの判断はＹＥＳとなり、業務終了ログ１４ａに対応するクライアントはまだ稼動中であるため、処理を終了する。
【００９５】
一方、ステップＳ１３ａの判断の結果、ＮＯ、すなわち、業務終了ログ１４ａに対応するクライアントにおいて、稼動中の業務アプリケーションが存在しないため、プロセス１５ａは、対応するクライアントの状態を「非稼動」に設定して処理を終了する。
【００９６】
ここで、図１４は、上述したステップＳ１〜ステップＳ５ａ〜ステップＳ７ａ、ステップＳ８ａ〜ステップＳ１２ａ、ステップＳ１３ａ、ステップＳ１４の処理に基づくクライアント稼動状態の検出結果を示す図であり、図１５は、第１実施形態で説明したステップＳ１〜ステップＳ１４の処理をマルチタスク時に適用した場合のクライアント稼動状態検出結果を示す図である。
【００９７】
すなわち、図１５に示すように、マルチタスク時の枝番号を考慮しなければ、業務アプリケーションＸ−１もＸ−２も同一の業務アプリケーションＸと認識してしまうため、Ｎｏ．１およびＮｏ．３の業務ログ１４により、クライアント♯１（２０）における業務アプリケーションＸ−１およびＸ−２が稼動状態となっている際において、６番目の業務ログ１４（Ｎｏ．６）として、クライアント♯１（２０）における業務アプリケーションＸの業務終了ログ１４が登録されると、業務アプリケーションＸ−２が稼動中であるにも拘らず、業務アプリケーションＸを終了、すなわち、非稼動状態であると判断してしまう。
【００９８】
しかしながら、本実施形態のクライアント稼動状態検出プロセス１５ａによれば、業務アプリケーション名・作業中の業務アプリケーション名の枝番号の組単位、すなわち、業務アプリケーションの枝番号毎に業務アプリケーションの稼動状態を判断しているため、Ｎｏ．１およびＮｏ．３の業務ログ１４ａにより、クライアント♯１（２０）における業務アプリケーションＸ−１およびＸ−２が稼動状態となっている際において、６番目の業務ログ１４ａ（Ｎｏ．６）として、クライアント♯１（２０）における業務アプリケーションＸ−１の業務終了ログ１４ａが登録されると、稼動中の業務アプリケーションＸ−１のみを終了状態とし、稼動中の業務アプリケーションＸ−２の状態はそのまま維持される。
【００９９】
したがって、マルチタスク時のクライアント稼動状態の誤検出を確実に回避することができる。
【０１００】
（第３の実施の形態）
図１６は、第３の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステム１ｂの概略構成を示すブロック図である。
【０１０１】
図１６に示すクライアント／サーバシステム１ｂにおいて、各クライアントは、第１実施形態と同様の業務アプリケーションＸ（２２）〜業務アプリケーションＷ（２５）に加えて、新たな業務アプリケーションＵ（２６）および業務アプリケーションＶ（２７）を有しており、これら業務アプリケーションＸ（２２）〜業務アプリケーションＶ（２７）における業務アプリケーションＷを除く複数の業務アプリケーションは、図１７に示すように、業務アプリケーションＸ（２２）を最上位の起動階層、その下位の起動階層に業務アプリケーションＹ（２３）および業務アプリケーションＺ（２４）、業務アプリケーションＹのさらに下位層に業務アプリケーションＵ（２６）および業務アプリケーションＶ（２７）となるような起動階層構造を成している。
【０１０２】
すなわち、下位の起動階層の業務アプリケーションは、業務アプリケーションが起動した状態で起動可能なアプリケーションであり、したがって、自アプリケーションより上位のアプリケーションが終了した場合には、そのアプリケーションより下位の起動階層を有するアプリケーションも同時に終了することになる。
【０１０３】
一方、本実施形態のクライアント／サーバシステム１ｂにおけるサーバ１０は、そのメモリに、クライアント業務アプリケーション起動下位階層情報（以下、起動下位階層情報と略記する）テーブル１７を記憶している。
【０１０４】
図１８は、サーバ１０に記憶された起動下位階層情報テーブル１７の構成例を示す図である。
【０１０５】
図１８に示すように、起動下位階層情報テーブル１７には、各クライアントの業務アプリケーションＸ（２２）〜業務アプリケーションＶ（２７）毎に、その業務アプリケーション名およびその上位階層の業務アプリケーション名を表す情報がレコード（第１レコード１７１、第２レコード１７２、・・・、第６レコード１７６）として、順次記憶されている。
【０１０６】
また、サーバ１０のクライアント稼動状態検出プロセス１５ｂは、第１実施形態と一部異なる処理を実行するようになっている。
【０１０７】
なお、その他の構成については、第１実施形態の構成と略同等であるため、同一の構成要素については、同一の符号を付してその説明を省略または簡略化する。
【０１０８】
以下、本実施形態のクライアント稼動状態検出プロセス１５ｂの処理について説明する。
【０１０９】
なお、クライアント稼動状態検出プロセス１５ｂのステップＳ１〜ステップＳ１４の処理は、前掲図５のステップＳ１〜ステップＳ１４の処理と同様であるため、その説明を省略する。
【０１１０】
すなわち、本実施形態のクライアント稼動状態検出プロセス１５ｂは、ステップＳ３の判断がＹＥＳ、すなわち、クライアント名１６ｉＣとクライアント名１４Ｃとが一致するレコード１６ｉが存在する場合（業務ログ１４に対応するクライアントにおいて他の業務アプリケーションが稼動中の場合）、プロセス１５ｂは、業務ログ１４で指示された業務アプリケーション名およびその起動下位層の業務アプリケーション名がクライアント稼動状態テーブル１６の該当するレコード１６ｉの作業中業務アプリケーション名に書き込まれているか否かを判断する。
【０１１１】
すなわち、例えば、該当レコード１６ｉが第２レコード１６２であると仮定すると、プロセス１５ｂは、第２レコード１６２の作業中の業務アプリケーション名１（１６２Ｎ１）、作業中の業務アプリケーション名２（１６２Ｎ２）、作業中の業務アプリケーション名３（１６２Ｎ３）、・・・を順に調べ、業務アプリケーション名１４Ｎと一致するものを探し、探した結果、業務ログ１４に対応する業務アプリケーション１４Ｎに一致するレコードが存在するか否か判断する（ステップＳ７ｂ）。
【０１１２】
このステップＳ７ｂの判断により、一致するレコードがある場合には、プロセス１５ｂは、クライアント稼動状態テーブル１６の該当レコード内の作業中の業務アプリケーション名のうち、業務ログ１４で指定された業務アプリケーション名およびその起動下位階層の業務アプリケーション名と一致するものをクリアする処理を行なう（ステップＳ２０）。
【０１１３】
以下、プロセス１５ｂのステップＳ２０の処理について、詳細に説明する。
【０１１４】
例えば、該当レコードが第２レコードであるとし、業務アプリケーション名が「業務アプリケーション」であったとする。
【０１１５】
［１］作業中の業務アプリケーション名ｉをｉ＝１とする。
【０１１６】
［２］作業中の業務アプリケーション名ｉ（１６２Ｎｉ）が「有効」かどうか調べる。
【０１１７】
［３］「有効」であれば［４］に進み、「無効」であれば［６］へ進む。
【０１１８】
［４］作業中の業務アプリケーション名ｉ（１６２ｉ）が、業務アプリケーション名１４Ｎと一致するかどうか調べる。
【０１１９】
この結果、一致する場合、作業中の業務アプリケーション名ｉ（１６２Ｎｉ）をクリアし、［５］へ進む。
【０１２０】
［５］業務アプリケーション名１４Ｎの起動下位階層の業務アプリケーション名を起動下位階層情報１７から求める。
【０１２１】
＜１＞対象レコードを第１レコード１７１とする。
【０１２２】
＜２＞対象レコードの業務アプリケーション名が書き込まれているか調べる。
【０１２３】
例えば、対象レコードが第１レコード１７１であるとする。
このとき、業務アプリケーション名１７１Ｎが書き込まれていれば＜３＞へ進み、そうでなければ＜６＞へ進む。
【０１２４】
＜３＞対象レコードの上位階層のアプリケーション名が書き込まれているか調べる。
例えば、対象レコードが第１レコード１７１であるとする。
このとき、上位階層の業務アプリケーション名１７１Ｐが書き込まれている場合＜４＞へ進み、書き込まれていなければ＜６＞進む。
【０１２５】
＜４＞上位階層の業務アプリケーション名は業務アプリケーション名１４Ｎと一致するかどうか調べる。
例えば、対象レコードが第１レコード１７１とする。
このとき、上位階層の業務アプリケーション名１７１Ｐが業務アプリケーション名１４Ｎと一致する場合、業務アプリケーション名１４Ｎの起動下位階層として業務アプリケーション名１７１Ｎを記憶する。
一方、一致しない場合＜５＞へ進む。
【０１２６】
＜５＞例えば対象レコードが第１レコードであるとすると、上位階層の業務アプリケーション名１７１Ｐ＝業務アプリケーション名１７ｊＮとなる第ｊレコードを以下のａ〜ｃの処理により探す。
ａ．上位階層の業務アプリケーション名１７ｊＰが存在し、業務アプリケーション名１４Ｎと一致する場合には、業務アプリケーション１４Ｎの起動下位階層として業務アプリケーション名１７１Ｐを記録し、＜６＞へ進む。
ｂ．上位階層の業務アプリケーション名１７ｊＰが存在し、業務アプリケーション名１４Ｎと一致しない場合においては、さらに、上位階層の業務アプリケーション名１７ｊＰ＝業務アプリケーション名１７ｋＮとなる第ｋレコードを探し、ａに戻る。
ｃ．上位階層の業務アプリケーション名１７ｊＰが書き込まれていない場合＜６＞へ進む。
【０１２７】
＜６＞クライアント業務アプリケーション起動下位階層情報の全てのレコードを処理したか否か判断する。
この判断の結果、全てのレコードを処理した場合＜７＞へ進み、そうでない場合、対象レコードを次のレコードとして＜２＞へ進む。
【０１２８】
＜７＞［６］へ進む。
なお、上記の＜２＞では階層が上下四代の階層（親・子・孫・ひ孫）となった場合でも処理できるように記述している。
例えば、業務アプリケーション名１４Ｎ＝アプリケーションＸの場合、起動下位階層は、アプリケーションＹ、アプリケーションＺ、アプリケーションＵ、アプリケーションＶとなる。
また、業務アプリケーション名１４Ｎ＝アプリケーションＺの場合、起動下位階層は、なしとなる。
【０１２９】
［６］クライアント稼動状態テーブル１６の該当レコード内の作業中の業務名が、上記［５］で記憶した業務アプリケーション名１４Ｎの起動下位階層の業務名と一致する場合、作業中の業務アプリケーション名をクリアする。
【０１３０】
例えば、クライアント稼動状態テーブル１６の該当レコードが第２レコードであるとすれば、作業中の業務アプリケーション名１（１６２Ｎ１）、作業中の業務アプリケーション名２（１６２Ｎ２）、作業中の業務アプリケーション名３（１６２Ｎ３）、・・・、に対して記憶した業務アプリケーション名１４Ｎの起動下位階層の業務名と一致するかどうか調べ、一致した作業中の業務アプリケーション名のみクリアする。
【０１３１】
次いで、プロセス１５ｂは、クライアント稼動状態テーブル１６の該当レコード内の作業中の業務アプリケーション名に業務ログで指示された値を書き込む。
【０１３２】
例えば、該当レコードが第２レコード１６２であるとすると、プロセス１５ｂは、第２レコードの作業中の業務アプリケーション名１（１６２Ｎ１）、作業中の業務アプリケーション名２（１６２Ｎ２）、作業中の業務アプリケーション名３（１６２Ｎ３）、・・・を順に調べ、未使用（作業中の業務アプリケーション名＝０）のものを探す。例えば、作業中の業務アプリケーション名１（１６２Ｎ１）であったとする。
【０１３３】
次いで、プロセス１５ｂは、作業中の業務アプリケーション名１（１６２Ｎ１）に、業務アプリケーション名１４Ｎに対応する値を書き込む（ステップＳ２１）。
【０１３４】
次いで、プロセス１５ｂは、クライアント稼動状態テーブル１６の該当レコード内のクライアント状態を「稼動中」、すなわち、クライアントの状態１６２Ｓに対して、「稼動中」を意味する値（データ）を書き込んで処理を終了する。
【０１３５】
ここで、図２０は、上述したステップＳ１〜ステップＳ７ｂ〜ステップＳ１４、ステップＳ２０〜ステップＳ２２に基づくクライアント稼動状態の検出結果を示す図であり、図２１は、第１実施形態で説明したステップＳ１〜ステップＳ１４の処理において、クライアントの業務アプリケーションが異常終了した場合でのクライアント稼動状態検出結果を示す図である。
【０１３６】
すなわち、図２１に示すように、Ｎｏ．１〜Ｎｏ．４の業務ログ１４により、クライアント♯１（２０）の業務アプリケーションＸ、Ｙ、ＷおよびＺがそれぞれ稼動状態である際に、業務アプリケーションＹおよびＺの上位階層である業務アプリケーションＸが異常終了すると、その下位階層の業務アプリケーションＹおよびＺも異常終了する。このとき、業務終了ログ１４は、業務ログファイル１３に登録されないので、クライアント稼動状態テーブル１６の業務アプリケーションＸ、ＹおよびＺは、異常終了しているにも拘わらず、稼動状態となっており、クライアント♯１（２０）の稼動状態が不正確になる。
【０１３７】
この後、クライアント♯１（２０）において業務アプリケーションＸが再起動されると（Ｎｏ．４の業務開始ログ１４が登録）、クライアント稼動状態テーブル１６には、既に業務アプリケーションＸが稼動状態であることを示す値が書き込まれているため、図５におけるステップＳ３およびステップＳ７は何れもＹＥＳとなり、クライアント稼動状態検出プロセス１５は、処理を終了してしまうため、業務アプリケーションＹおよびＺは、間違った状態のままでサーバ１０認識されることになり、クライアント♯１（２０）では、実際は作業終了している業務アプリケーションＹおよびＺが、作業中として残ってしまう結果となる。
【０１３８】
しかしながら、本実施形態によれば、図２０に示すように、Ｎｏ．１〜Ｎｏ．４の業務ログ１４により、クライアント♯１（２０）の業務アプリケーションＸ、Ｙ、ＷおよびＺがそれぞれ稼動状態である際に、業務アプリケーションＹおよびＺの上位階層である業務アプリケーションＸが異常終了して、クライアント♯１（２０）の稼動状態が不正確になった場合に、クライアント♯１（２０）において業務アプリケーションＸが再起動されると（Ｎｏ．４の業務開始ログ１４が登録）、ステップＳ３の判断はＹＥＳとなり、ステップＳ７ｂの処理において、業務アプリケーションＸおよびその起動下位階層の業務アプリケーションＹおよびＺが検出され、ステップＳ２０およびＳ２１の処理により、業務アプリケーションＸの状態は再度、稼動状態に設定され、その下位階層である業務アプリケーションＹおよびＺの起動状態を表す値がクリアされる。
【０１３９】
したがって、上位階層の業務アプリケーションＸが異常終了（業務終了ログなし）した場合でも、その下位階層である業務アプリケーションＹおよびＺの状態を正確に把握することができる。
【０１４０】
（第４の実施の形態）
図２２は、第４の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステム１ｃの概略構成を示すブロック図である。
【０１４１】
本実施形態の業務アプリケーションＸ（２２）〜業務アプリケーションＷ（２５）は、第３実施形態と同様に、図１８に示す起動制御階層構造を成している。
【０１４２】
そして、本実施形態では、図２２に示すクライアント／サーバシステム１ｃにおけるサーバ１０のクライアント稼動状態検出プロセス１５ｃの処理の一部が第１実施形態と異なる処理となっている。
【０１４３】
なお、その他の構成については、第１実施形態の構成と略同等であるため、同一の構成要素については、同一の符号を付してその説明を省略または簡略化する。
【０１４４】
また、クライアント稼動状態検出プロセス１５ｃのステップＳ１〜ステップＳ１４の処理は、前掲図５のステップＳ１〜ステップＳ１４の処理と同様であるため、その説明を省略する。
【０１４５】
すなわち、本実施形態のクライアント稼動状態検出プロセス１５ｃは、ステップＳ１０の判断により、業務ログ１４が業務終了ではない場合（ステップＳ１０→ＮＯ）、すなわち、業務ログ１４が業務開始ログおよび業務終了ログの何れでもない場合、業務ログ１４のメッセージ番号１４Ｂを調べて、業務立上の業務ログ（業務立上ログ）かどうかを判定する（ステップＳ３０）。
【０１４６】
このステップＳ３０の判断により、業務ログ１４が業務立上ではない場合（ステップＳ３０→ＮＯ）、すなわち、業務ログ１４が業務開始ログ、業務終了ログおよび業務立上ログの何れでもない場合、クライアント稼動状態検出プロセス１５にとって不必要な業務ログであると判断して処理を終了する。
【０１４７】
一方、ステップＳ３０の判断により、業務ログ１４が業務立上の場合（ステップＳ３０→ＹＥＳ）、プロセス１５ｃは、業務ログ１４のクライアント名１４Ｃに対応したクライアント稼動状態テーブル１６に置けるレコードを探す。
【０１４８】
すなわち、プロセス１５ｃは、クライアント稼動状態テーブル１６の第１レコード１６１のクライアント名１６１Ｃ、第２レコード１６２のクライアント名１６２Ｃ、第３レコード１６３のクライアント名１６３Ｃ、・・・を順次調べ、クライアント名１６ｉＣとクライアント名１４Ｃとが一致するレコード１６ｉを探す（ステップＳ３１）。
【０１４９】
例えば、第２レコード１６２において、クライアント名１６ｉＣとクライアント名１４Ｃとが一致した場合、プロセス１５ｃは、クライアント稼動状態テーブル１６の該当レコード内の作業中の業務アプリケーション名１（１６２Ｎ１）、作業中の業務アプリケーション名２（１６２Ｎ２）、作業中の業務アプリケーション名３（１６２Ｎ３）、・・・を全てテーブル１６から消去（すなわち、クリアに対応する値“０”を書き込む）する（ステップ３２）。
【０１５０】
次いで、プロセス１５ｃは、クライアント稼動状態テーブル１６の該当レコード内のクライアントの状態を「非稼動」、すなわち、クライアントの状態１６２Ｓに対して、「非稼動」を意味する値（データ）を書き込んで処理を終了する（ステップＳ３３）。
【０１５１】
本実施形態によれば、図２４に示すように、Ｎｏ．１〜Ｎｏ．４の業務ログ１４により、クライアント♯１（２０）の業務アプリケーションＸ、Ｙ、ＷおよびＺがそれぞれ稼動状態である際に、業務アプリケーションＹおよびＺの上位階層である業務アプリケーションＸが異常終了して、クライアント♯１（２０）の稼動状態が不正確になった場合に、クライアント♯１（２０）が立上られると（Ｎｏ．６の業務立上ログ１４が登録）、ステップＳ１０の判断はＮＯ、ステップＳ３０の判断はＹＥＳとなり、ステップＳ３１〜ステップＳ３２において全ての業務アプリケーションＸ〜業務アプリケーションＷがクリアされるため、クライアント稼動状態テーブル１６を介して、異常終了したクライアント♯１（２０）の稼動状態を正確に把握することができる。
【０１５２】
（第５の実施の形態）
図２５は、第５の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステム１ｄの概略構成を示すブロック図である。
【０１５３】
図２６は、本実施形態における１件分の業務ログ１４ｂのデータ構成を概念的に示す図である。
【０１５４】
図２６に示すように、業務ログ１４ｂは、第１実施形態と同様のクライアント名１４Ｃ、業務アプリケーション名１４Ｎ、メッセージ番号１４Ｂおよびメッセージ文字列１４Ｍに加えて、クライアント業務ログファイル１３に登録された登録日時を表すデータ１４Ｔを含んでいる。
【０１５５】
図２７は、本実施形態のクライアント稼動状態テーブル１６ｄの構成例を示す図である。
【０１５６】
図２７に示すように、クライアント稼動状態テーブル１６ｄには、稼動状態のクライアント名１６１Ｃ、クライアントの更新日時を表すデータ１６１Ｔ、クライアントの状態（稼動中／非稼動）を表すデータ１６１Ｓ、そのクライアント作業中の業務アプリケーション名１（１６１Ｎ１）およびその作業中の業務アプリケーション名１の作業開始日時１６１ＮＴ１〜作業中の業務アプリケーション名４（１６１Ｎ４）およびその作業中の業務アプリケーション名４（１６１ＮＴ４）・・・が順次第１レコード、第２レコード、・・・として記憶されるようになっている。
【０１５７】
一方、本実施形態におけるクライアント稼動状態検出プロセス１５ｄは、第１実施形態のプロセス１５と一部異なる処理を行なうようになっている。
【０１５８】
なお、その他の構成については、第１実施形態の構成と略同等であるため、同一の構成要素については、同一の符号を付してその説明を省略または簡略化する。
【０１５９】
すなわち、サーバ１０のクライアント稼動状態検出プロセス１５ｄは、前掲図５に示すステップＳ１〜ステップＳ５の処理（但し、業務ログは１４ｂ）を終了した後、クライアント稼動状態テーブル１６の該当レコード内の日時情報に作業用データファイルの対象レコードの値を書き込む。
【０１６０】
例えば、該当レコードが第２レコード１６２であり、作業中の業務アプリケーション名１（１６２Ｎ１）に値を設定したとすると、プロセス１５ｄは、作業中の業務アプリケーション名１の作業開始日時１６２Ｎ１Ｔに対して、登録日時１４Ｔに対応する値を書込み、次いで、状態更新日時１６２Ｔに対して、登録日時１４Ｔに対応する値を書き込む（ステップＳ４０）。
【０１６１】
次いで、ステップＳ６の処理により、クライアントの状態１６２Ｓに対して、「稼動中」を意味する値（データ）が書き込まれる。
【０１６２】
また、ステップＳ７〜ステップＳ８の処理により、作業中の業務アプリケーション名１（１６２Ｎ１）に、業務アプリケーション名１４Ｎに対応する値が書き込まれた後において、プロセス１５ｄは、作業中の業務アプリケーション名１の作業開始日時１６２Ｎ１Ｔに対して、登録日時１４Ｔに対応する値を書込み、次いで、状態更新日時１６２Ｔに対して、登録日時１４Ｔに対応する値を書き込む（ステップＳ４１）。
【０１６３】
一方、業務ログが業務終了ログ１４であった場合（ステップＳ１０→ＹＥＳ）、ステップＳ１１〜ステップＳ１２の業務アプリケーションクリア処理を終えた後で、プロセス１５ｄは、クライアント稼動状態テーブル１６の該当レコード内の日時情報に作業用データファイルの対象レコードの値を書き込む。
【０１６４】
例えば、該当レコードが第２レコード１６２であり、作業中の業務アプリケーション名１（１６２Ｎ１）に値を設定したとすると、プロセス１５ｄは、作業中の業務アプリケーション名１の作業開始日時１６２Ｎ１Ｔに対して、登録日時１４Ｔに対応する値を書込み、次いで、状態更新日時１６２Ｔに対して、登録日時１４Ｔに対応する値を書き込む（ステップＳ４１）。
【０１６５】
次いで、ステップＳ１３〜ステップＳ１４の処理により、稼動中の業務アプリケーションが１件もない場合に限り、対応するクライアントの状態が「非稼動」に設定される。
【０１６６】
一方、図３０は、本実施形態における運用管理端末１００のクライアント稼動状態表示機能１０１に基づく動作を示すフローチャートである。
【０１６７】
すなわち、運用管理端末１００は、サーバ１０からクライアント稼動状態テーブル１６ｄを読み込み、次いで、クライアント稼動状態テーブル１６ｄの第１レコード１６１を対象レコードとし、その対象レコ−ドのクライアント名に対する作業中の業務アプリケーションの放置状態を検出する（ステップＳ５２）。
【０１６８】
例えば対象レコードを第１レコードとすると、運用管理端末１００は、ステップＳ５２の処理として、次の処理を行なう。
［１］クライアント名１６１Ｃは書き込まれているか否かを判断する。
書き込まれていれば［２］へ進み、そうでなければ（４）へ進む。
［２］作業中の業務アプリケーション名１を対象にする。
［３］対象の業務アプリケーション名は書き込まれているか否か判断する。  例えば業務アプリケーション名１  １６１Ｎ１とする。
業務アプリケーション名１  １６１Ｎが書き込まれていれば［４］へ進む、そうでなければ［６］へ進む。
［４］作業中の業務アプリケーション名の作業開始日時と現在日時との差を計算する。
例えば業務アプリケーション名１であれば、業務アプリケーション名１の作業開始日時１６１Ｎ１Ｔと現在日時との差を計算する。
［５］差が一定の値を超えている場合、対象の業務アプリケーション名に対して作業放置状態を表す警告データを付与する。
差が一定値を超えていなければ、［６］へ進む。
［６］全ての作業中の業務アプリケーション名に対して処理したか否か判断する。
【０１６９】
この判断の結果、処理した場合はステップＳ５３へ進み、未処理の業務アプリケーションが存在する場合には、次の業務アプリケーション名を対象として［３］に戻り、上述した処理を繰り返す。
【０１７０】
一方、全ての作業中の業務アプリケーション名に対して処理が終了した場合には、プロセス１５ｄは、クライアント稼動状態テーブル１６ｄの全てのレコードに対して処理したか否かを判断する（ステップＳ５３）。
【０１７１】
ステップＳ５３の判断の結果、全てのレコードを処理した場合については（ステップＳ５３→ＹＥＳ）、ステップＳ５５の処理に移行し、未処理のレコードが存在する場合には、ステップＳ５４の処理に移行する。
【０１７２】
続いて、プロセス１５ｄは、対象レコードを次のレコード（例えば、対象が第１レコードであれば次のレコードを第２レード１６２）にしてステップＳ５２の処理に移行して、再度、ステップＳ５２以降の処理を次のレコードに対して実行する（ステップＳ５４）。
【０１７３】
このようにして、全てのレコードの全てのアプリケーションに対してその作業開始日時１６１Ｎ１Ｔと現在日時との差が一定値を超えたか否かの判断処理および一定値を超えた場合における対応する業務アプリケーションに対する警告データ付与処理が終了すると、ステップＳ５３の判断はＹＥＳとなり、運用管理端末１００は、クライアント稼動状態テーブル１６ｄ、すなわち、放置状態と判断された業務アプリケーションには警告データが付与された状態のクライアント稼動状態テーブル１６ｄをクライアント稼動状態表示用データとして画面上に表示して（ステップＳ５５）、その処理を終了する。
【０１７４】
すなわち、本実施形態によれば、クライアントの各業務アプリケーションの作業開始日時と現在日時との差が一定値を超えた場合、言い換えれば、作業放置状態が一定時間を超えた場合において、その業務アプリケーションに警告データを付与し、警告データを付与した状態のクライアント稼動状態を表すデータを画面上に表示することができるため、その表示データに基づいて、運用管理端末１００から対応するクライアントに対して、作業放置を警告するためのデータを通知することができるため、クライアント側の業務アプリケーション放置状態を回避することができる。
【０１７５】
なお、運用管理端末１００の上記クライアント稼動状態表示機能１０１に基づく処理は、サーバ１０側で実行することも可能である。
【０１７６】
（第６の実施の形態）
図３１は、本発明の第６の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステム１ｅの概略構成を示すブロック図である。
【０１７７】
本実施形態においては、サーバ１０の業務ログ登録プロセス１２ａは、通信プロセス１１から渡された業務ログ１４を登録日時を含むレコードとして業務ログファイル１３に書き込むことにより、業務ログ１４を登録するようになっており、クライアント稼動状態検出プロセス１５ｅは、周期的、あるいは運用管理端末１００を介したオペレータの指示に応じて、業務ログファイル１３に書き込まれた業務ログ１４から、クライアント稼動状態の検出に必要なデータのみを抽出して作業用データファイル１８に書込み、この作業用データファイル１８に書き込んだデータに基づいてクライアントの稼動状態検出処理を行なって、クライアント稼動状態テーブル１６を更新するようになっている。
【０１７８】
なお、その他の構成については、第１実施形態の構成と略同等であるため、同一の構成要素については、同一の符号を付してその説明を省略または簡略化する。
【０１７９】
また、以下の説明では、クライアント稼動状態検出プロセス１５ｅは、クライアント稼動状態テーブル１６のレコードを逐次更新する方法で説明しているが、本発明はその方法に限定されるものではなく、次の方法も容易に実現可能である。
【０１８０】
すなわち、［１］メモリの別の記憶領域に作成した後、テーブル全体を一括して更新する方法や、［２］クライアント毎に変化を検出して、変化のあったクライアントのレコードだけ更新する方法等が実現可能である。
【０１８１】
以下、本実施形態の全体処理について、特に、サーバ１０のクライアント稼動状態検出プロセス１５ｅを中心に説明する。
【０１８２】
クライアント♯１（２０）〜クライアント♯３（４０）の少なくとも１つのクライアントが複数の業務アプリケーションプロセスＸ（２２）〜Ｗ（２５）の内の少なくとも１つの業務アプリケーションプロセスを実行する過程において、対応クライアントの処理により発行された業務ログ１４は、そのクライアントの通信プロセス２１により、発行される毎（すなわち、１件ずつ）に通信ネットワークＮを介してサーバ１０に送信される。
【０１８３】
このとき、サーバ１０の通信プロセス１１は、通信ネットワークＮを介して送信されてきた業務ログ１４を受信して、その業務ログ１４を業務ログ登録プロセス１２ａに渡し、業務ログ登録プロセス１２ａは、渡された業務ログ１４を登録日時を含むレコードとして業務ログファイル１３に書き込むことにより、業務ログ１４を登録する。
【０１８４】
この結果、業務ログファイル１３には、サーバ１０に順次送信されてきた業務ログ１４が順次登録される。
【０１８５】
このとき、本実施形態のクライアント稼動状態検出プロセス１５ｅは、クライアント業務ログファイル１３を例えば周期的に読出して、図３２に示す処理を実行する。
【０１８６】
なお、以下の説明では、業務ログファイル１３の業務ログ１４のレコードは、登録日時の早い順にソート（並べ替え）されているものとして説明する。
【０１８７】
もし、業務ログファイル１３のレコードが日時順にソートされていなければ、ソート処理を追加すればよい。
【０１８８】
すなわち、クライアント稼動状態検出プロセス１５ｅは、ステップＳ６１の処理として、業務ログファイル１３から業務開始、業務終了の業務ログ１４だけを抽出して作業用データファイル１８に書き込む。
【０１８９】
次いで、クライアント稼動状態検出プロセス１５ｅは、ステップＳ６２の処理として、作業用データファイル１８のレコードに対して、クライアント名・業務アプリケーション名の組毎に最新日時の業務開始のログレコードだけを残し、他のレコードは無効にする。
【０１９０】
続いて、クライアント稼動状態検出プロセス１５ｅは、ステップＳ６３の処理として、作業用データファイル１８に基づいて、クライアント稼動状態テーブル１６のデータを作成する。
【０１９１】
図３３は、本実施形態のクライアント稼動状態検出プロセス１５ｅのステップＳ６１の処理（業務開始ログ、業務終了ログ抽出処理）を詳細に説明するためのフローチャートである。
【０１９２】
プロセス１５ｅは、（１）ステップＳ６１０１の処理として、業務ログファイル１３を読み込み、次いで、（２）Ｓ６１０２の処理として、業務ログファイル１３の先頭レコード、すなわち、業務ログ第１レコード１３１を対象とする。
【０１９３】
続いて、プロセス１５ｅは、（３）ステップＳ６１０３の処理として、業務ログは業務開始または業務終了か否か判断する。
【０１９４】
例えば、業務ログファイル１３の対象レコードが業務ログ第２レコード１３２であるとする。
【０１９５】
このとき、ステップＳ６１０３の処理として、プロセス１５ｅは、［１］対象レコードのメッセージ番号１３２Ｂを調べ、業務ログの内容が業務開始または業務終了かどうか調べ、［２］対象レコードが業務開始または業務終了の業務ログである場合には（４）のステップＳ６１０４の処理に進み、そうでなければ（５）のステップＳ６１０５の処理へ進む。
【０１９６】
プロセス１５ｅは、ステップＳ６１０４の処理として、作業用データファイル１８に対象レコードを書き込む（第１レコードから順にデータを書き込む）。
【０１９７】
図３４は、作業用データファイル１８の構成例を示す図である。
【０１９８】
例えば、業務ログファイル１３の対象レコードが業務ログ第２レコード１３２であり、作業用データファイル１８の空きレコードが第１レコード１８１であるとする。
【０１９９】
このとき、プロセス１５ｅは、［１］クライアント名１８１Ｃとしてクライアント名１３２Ｃの値を書込み、［２］業務アプリケーション名１８１Ｎとして業務アプリケーション名１３２Ｎの値を書込み、［３］メッセージ番号１８１Ｂとしてメッセージ番号１３２Ｂの値を書き込む。
【０２００】
次いで、プロセス１５ｅは、（５）ステップＳ６１０５の処理として、業務ログファイル１３の対象レコードを次のレコードとする（例えば、業務ログファイル１３の対象レコードが業務ログ第２レコードであるとすれば、次の処理対象として業務ログ第３レコードとする。
【０２０１】
続いて、プロセス１５ｅは、（６）Ｓ６１０６の処理として、業務ログファイルの全てのレコードに対して処理したか否かを判断する。
【０２０２】
この判断の結果、業務ログファイル１３の全てのレコードに対して処理した場合には（ステップＳ６１０６→ＹＥＳ）、処理を終了し、未処理のレコードが存在する場合には（ステップＳ６１０６→ＮＯ）、（３）のステップＳ６１０３の処理に戻って、上述した処理を繰り返す。
【０２０３】
この結果、作業用データファイル１８には、業務開始および業務終了の業務ログ１４だけが抽出されて書き込まれる。
【０２０４】
図３５は、本実施形態のクライアント稼動状態検出プロセス１５ｅのステップＳ６２の処理（最新日時の業務開始のログレコード抽出処理）を詳細に説明するためのフローチャートである。
【０２０５】
なお、以下の説明では、不要になったレコードを物理的に除去せずにデータ的に無効状態にする方法で説明しているが、物理的に除去することも容易に実現できる。
【０２０６】
すなわち、プロセス１５ｅは、（１）ステップＳ６２０１の処理として、作業用データファイル１８の最終レコード、すなわち、第Ｌレコード１８Ｌを対象レコードとする。
【０２０７】
次いで、プロセス１５ｅは、（２）ステップＳ６２０２の処理として、対象レコードは業務開始または業務終了か否かを判断する。
【０２０８】
例えば、対象レコードが第Ｌレコードであるとすると、プロセス１５ｅは、［１］メッセージ番号１８ＬＢが業務開始または業務終了かを調べ、［２］業務開始または業務終了であれば（３）ステップＳ６２０３に進み、そうでなければ（無効）（７）に進む。
【０２０９】
プロセス１５ｅは、（３）ステップＳ６２０３の処理として、対象レコードは業務開始か否か判断する。
【０２１０】
例えば、対象レコードが第Ｌレコードであるとすると、プロセス１５ｅは、［１］メッセージ番号１８ＬＢが業務開始であれば（４）ステップＳ６２０４へ進み、そうでなければ（業務終了）であれば（５）ステップＳ６２０５に進む。
【０２１１】
プロセス１５ｅは、（４）ステップＳ６２０４の処理として、対象レコードの位置より若い全てのレコードのうち、そのクライアント名と業務アプリケーション名が対象レコードの値と一致するものを全て無効にする。
【０２１２】
例えば、対象レコードが第Ｌレコード１８Ｌであるとすると、対象レコードの位置より若いレコードは、第Ｌ−１レコード、第Ｌ−２レコード、・・・、第３レコード、第２レコード、第１レコードとなる。
【０２１３】
すなわち、プロセス１５ｅは、［１］第１レコード１８１から第Ｌ−１レコード１８Ｌ−１に対して、クライアント名１８ｉＣ＝クライアント名１８ＬＣ、かつ業務アプリケーション名１８ｉＮ＝業務アプリケーション名１８ＬＮが成り立つ全てのレコードｉ（１８ｉ）のレコードをクリアにし（無効にする）、［２］（７）ステップＳ６２０７へ進む。
【０２１４】
次いで、プロセス１５ｅは、（５）ステップＳ６２０５の処理として、対象レコードの位置より若いレコード全てのレコードのうち、そのクライアント名と業務アプリケーション名が対象レコードの値と一致するものを全て無効にする。
【０２１５】
例えば、対象レコードが第Ｌレコード１８Ｌであるとすると対象レコードの位置より若いレコードは、第Ｌ−１レコード、第Ｌ−２レコード、・・・、第３レコード、第２レコード、第１レコードとなる。
【０２１６】
すなわち、プロセス１５ｅは、［１］第１レコード１８１から第Ｌ−１レコード１８Ｌ−１に対して、クライアント名１８ｉＣ＝クライアント名１８ＬＣ、かつ業務アプリケーション名１８ｉＮ＝業務アプリケーション名１８ＬＮ、が成り立つ全てのレコードｉ（１８ｉ）のレコードをクリアにする（無効にする）。
【０２１７】
続いて、プロセス１５ｅは、（６）ステップＳ６２０６の処理として、対象レコードを無効にする。
【０２１８】
例えば、対象レコードが第Ｌレコード１８Ｌであるとすると、［１］第Ｌレコード１８Ｌのレコードをクリアにする（無効にする）。
【０２１９】
次いで、プロセス１５ｅは、（７）ステップＳ６２０７の処理として、作業用データファイル１８の対象レコードを次のレコードとする。
【０２２０】
すなわち、例えば、現在の対象レコードが第Ｌレコード１８Ｌであるとすると、次のレコードは１つ手前の第Ｌ−１レコード１８Ｌ−１となる。
【０２２１】
そして、プロセス１５ｅは、（８）ステップＳ６２０８の処理として、作業用データファイル１８の全てのレコードに対して処理したか否か判断し、［１］対象レコードとして第１レコードまで処理したら処理を終了し、未処理のレコードが作業用データファイル１８に存在すれば、（２）ステップＳ６２０２の処理へ移行して上述した処理を繰り返す。
【０２２２】
この結果、作業用データファイル１８には、最新日時の業務開始ログ１４のみが残される。
【０２２３】
図３６は、本実施形態のクライアント稼動状態検出プロセス１５ｅのステップＳ６３の処理（作業用データファイル１８に基づいて、クライアント稼動状態テーブル１６のデータを作成する処理）を詳細に説明するためのフローチャートである。
【０２２４】
すなわち、プロセス１５ｅは、ステップＳ６３０１の処理として、クライアント稼動状態テーブル１６を初期化（クリア）する。
【０２２５】
すなわち、クライアント稼動状態テーブル１６の第１レコード１６１、第２レコード１６２、第３レコード１６３、・・・内の全てのデータ項目をクリアする。
【０２２６】
次いで、プロセス１５ｅは、（２）ステップＳ６３０２の処理として、作業用データファイル１８の先頭のレコード、すなわち、第１レコード１８１を対象とし、（３）ステップＳ６３０３の処理として、対象レコードは業務開始か否か判断し、例えば、対象レコードが第１レコード１８１であるとすれば、メッセージ番号１８１Ｂに業務開始を意味する値が設定されていれば（４）ステップＳ６３０４に進み、そうでなければ（８）ステップＳ６３０８へ進む。
【０２２７】
なお、レコードは、ステップＳ６２（ステップＳ６２０１〜ステップＳ６２０８）の処理により、業務開始ログのレコードのみとなっているはずであり、業務開始ログでなければ無効である。
【０２２８】
続いて、プロセス１５ｅは、（４）ステップＳ６３０４の処理として、対象レコードのクライアント名は、第１実施形態のステップＳ３と同様の処理として、クライアント稼動テーブル１６に既に書き込まれているか否か判断する。
【０２２９】
すなわち、プロセス１５ｅは、［１］クライアント稼動状態テーブル１６のクライアント名１６１Ｃ、クライアント名１６２Ｃ、クライアント名１６３Ｃ、・・・を順次調べ、クライアント名１６ｉＣ＝クライアント名１４Ｃとなるレコード１６ｉが存在するかどうか調べる。
【０２３０】
次いで、プロセス１５ｅは、［２］条件を満たすレコード１６ｉが存在する場合（すなわち、既に他の業務アプリケーション稼動により該当クライアントが稼動状態の場合）、（７）ステップＳ６３０７へ進み、存在しない場合（該当クライアントが非稼動状態の場合）、次の（５）ステップＳ６３０５へ進む。
【０２３１】
プロセス１５ｅは、第１実施形態のステップＳ４〜ステップＳ５に対応する（５）ステップＳ６３０５の処理として、クライアント稼動状態テーブル１６の空きレコード内のクライアント名、作業中の業務アプリケーション名に作業用データファイルの対象レコードの値を書き込む。
【０２３２】
例えば、作業用データファイルの対象レコードが第２レコード１８２であり、クライアント稼動状態テーブルの空きレコードが第１レコード１６１であるとする。
【０２３３】
このとき、プロセス１５ｅは、［１］第１レコードのクライアント名１６２Ｃとしてクライアント名１８２Ｃの値を書込み、［２］第１レコードの作業中の業務アプリケーション名１（１６２Ｎ１）の値として、業務アプリケーション名１８２Ｎの値を書き込む。
【０２３４】
次いで、プロセス１５ｅは、第１実施形態のステップＳ６に対応する（６）ステップＳ６３０６として、クライアント稼動状態テーブル１６の該当レコード内のクライアントの状態を「稼動中」にする。
【０２３５】
例えば、クライアント稼動状態テーブルの第１レコード１６１が該当レコードであるとすれば、プロセス１５ｅは、クライアントの状態１６１Ｓとして、「稼動中」を表す値を書き込み、処理を終了する。
【０２３６】
一方、プロセス１５ｅは、第１実施形態のステップＳ７〜ステップＳ８に対応する（７）ステップＳ６３０７の処理として、クライアント稼動状態テーブル１６の該当レコード内の作業中の業務アプリケーション名に作業用データファイルの対象レコードの値を書き込む。
【０２３７】
例えば、作業用データファイルの対象レコードが第２レコード１８２であり、クライアント稼動状態テーブルの該当レコードが第１レコード１６１であるとする。
【０２３８】
このとき、プロセス１５ｅは、［１］第１レコードの作業中の業務アプリケーション名１（１６１Ｎ１）、作業中の業務アプリケーション名２（１６１Ｎ２）、作業中の業務アプリケーション名３（１６１Ｎ３）、・・・を順に調べ、クリアされている（未使用）のものを探す。
【０２３９】
例えば、作業中の業務アプリケーション名１（１６１Ｎ２）であったとすると、［２］作業中の業務アプリケーション名１（１６１Ｎ２）に業務アプリケーション名１８２Ｎに対応する値を書き込む。
【０２４０】
次いで、プロセス１５ｅは、（８）ステップＳ６３０８の処理として、作業用データファイル１８の対象レコードを次のレコードとする。
【０２４１】
例えば、作業用データファイル１８の対象レコードが第２レコード１８２であったとすれば、次の対象レコードを第３レコード１８３にする。
【０２４２】
次いで、プロセス１５ｅは、（９）ステップＳ６３０９の処理として、作業用データファイル１８の全てのレコードに対して処理したか否か判断し、［１］全てのレコードに対する処理を終了したら、全体の処理を終了し、未処理のレコードが作業用データファイル１８に存在すれば、（３）ステップＳ６３０３の処理へ移行して上述した処理を繰り返す。
【０２４３】
本実施形態においても、第１の実施の形態と同様に、クライアントの業務アプリケーション実行過程において発行される業務ログ１４に基づいて、その業務ログ１４に対応するクライアントの稼動状態（稼動中か、非稼動状態か）を容易に検出・把握することができる。
【０２４４】
特に、本実施形態によれば、既存のプロセス（クライアントの業務ログ登録プロセス１２ａ）を改造することなく、クライアント稼動状態検出プロセス１５ｅを導入することができるため、導入が非常に容易である。
【０２４５】
さらに、本実施形態によれば、業務ログファイル１３の全体を一括して処理することができるため、読み出す周期間隔を調整することにより、より効率的なクライアント稼動状態把握処理を実行することができる。
【０２４６】
（第７の実施の形態）
図３７は、本発明の第７の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステム１ｆの概略構成を示すブロック図である。
【０２４７】
本実施形態のクライアント／サーバシステム１ｆにおいては、サーバ１０のクライアント稼動状態検出プロセス１５ｆおよび作業用データファイル１８ａがそれぞれ第２実施形態の構成および第６実施形態の構成と異なっており、その他の構成については、第２および第６実施形態の構成と略同等であるため、同一の構成要素については、同一の符号を付してその説明を省略または簡略化する。
【０２４８】
図３８は、本実施形態の作業用データファイル１８ａの構成例を示す図であり、図１８ａに示すように、作業用データファイル１８ａには、業務開始ログおよび業務終了ログが順次第１レコード、第２レコード、・・・として書き込まれる（登録される）。
【０２４９】
すなわち、本実施形態によれば、図３９に示すように、プロセス１５ｆは、上述したステップＳ６１の処理（業務開始ログ、業務終了ログ抽出処理）を実行した後、ステップＳ６２ａの処理として、作業用データファイル１８のレコードに対して、クライアント名・業務アプリケーション名・業務アプリケーション名の枝番号の組毎に最新日時の業務開始のログレコードだけを残し、他のレコードは無効にする。
【０２５０】
本実施形態では、上記ステップＳ６２ａの処理に特徴を有している。
【０２５１】
すなわち、プロセス１５ｆは、ステップＳ６２ａの処理の詳細として、図４０に示すように、上述したステップＳ６２０１〜Ｓ６２０３の処理を実行した後、メッセージ番号１８ＬＢが業務開始であった場合に、第２実施形態のステップＳ１２ａに対応するステップＳ６２０４ａの処理として、対象レコードの位置より若いレコード全てのレコードのうち、そのクライアント名・業務アプリケーション名・業務アプリケーション名の枝番号の組が対象レコードの値と一致するものを全て無効にする。
【０２５２】
例えば、対象レコードが第Ｌレコード１８Ｌであるとすると対象レコードの位置より若いレコードは、第Ｌ−１レコード、第Ｌ−２レコード、・・・、第３レコード、第２レコード、第１レコードとなる。
【０２５３】
すなわち、プロセス１５ｆは、［１］第１レコード１８１から第Ｌ−１レコード１８Ｌ−１に対して次の処理をする。
【０２５４】
＜１＞クライアント名１８ｉＣ＝クライアント名１８ＬＣ、＜２＞業務アプリケーション名１８ｉＮ＝業務アプリケーション名１８ＬＮ、＜３＞マルチタスク時の業務アプリケーション名の枝番号１８ｉ＝マルチタスク時の業務アプリケーション名の枝番号１８ＬＫの全てが成り立つ全てのレコードｉ（１８ｉ）のレコードをクリアにする（無効にする）。
【０２５５】
次いで、プロセス１５ｆは、［２］（７）ステップＳ６２０７へ進む。
【０２５６】
一方、プロセス１５ｆは、メッセージ番号１８ＬＢが業務終了であった場合に、第２実施形態のステップＳ１２ａに対応するステップＳ６２０５ａの処理として、対象レコードの位置より若い全てのレコードのうち、そのクライアント名・業務アプリケーション名・業務アプリケーション名の枝番号の組が対象レコードの値と一致するものを全て無効にする。
【０２５７】
例えば、対象レコードが第Ｌレコード１８Ｌであるとすると対象レコードの位置より若いレコードは、第Ｌ−１レコード、第Ｌ−２レコード、・・・、第３レコード、第２レコード、第１レコードとなる。
【０２５８】
すなわち、プロセス１５ｆは、［１］第１レコード１８１から第Ｌ−１レコード１８Ｌ−１に対して次の処理をする。
【０２５９】
＜１＞クライアント名１８ｉＣ＝クライアント名１８ＬＣ、＜２＞業務アプリケーション名１８ｉＮ＝業務アプリケーション名１８ＬＮ、＜３＞マルチタスク時の業務アプリケーション名の枝番号１８ｉＫ＝マルチタスク時の業務アプリケーション名の枝番号１８ＬＫの全てが成り立つ全てのレコードｉ（１８ｉ）のレコードをクリアにする（無効にする）。
【０２６０】
以下は、図３５の処理と同様である。
【０２６１】
そして、プロセス１５ｆは、図４１に示すように、上述したステップＳ６３０１〜Ｓ６３０４の処理を実行した後、第２実施形態のステップＳ５ａに対応する（５）ステップＳ６３０５ａの処理として、クライアント稼動状態テーブルの空きレコード内のクライアント名、作業中の業務アプリケーション名、作業中の業務アプリケーション名の枝番号に作業用データファイルの対象レコードの値を書き込む。
【０２６２】
例えば、作業用データファイルの対象レコードが第２レコード１８２であり、クライアント稼動状態テーブルの空きレコードが第１レコード１６１であるとする。
【０２６３】
このとき、プロセス１５ｆは、［１］第１レコードのクライアント名１６２Ｃとしてクライアント名１８２Ｃの値を書込み、［２］第１レコードの作業中の業務アプリケーション名１（１６２Ｎ１）の値として、業務アプリケーション名１８２Ｎの値を書き込み、［３］第１レコードの作業中の業務アプリケーション名１の枝番号１６２Ｋ１として、マルチタスク時の業務アプリケーション名の枝番号の値を書き込む。
【０２６４】
一方、プロセス１５ｆは、第２実施形態のステップＳ８ａに対応する（７）ステップＳ６３０７ａの処理として、クライアント稼動状態テーブル１６ａの該当レコード内の作業中の業務アプリケーション名および業務アプリケーション名の枝番号に作業用データファイルの対象レコードの値を書き込む。
【０２６５】
例えば、作業用データファイルの対象レコードが第２レコード１８２であり、クライアント稼動状態テーブルの該当レコードが第１レコード１６１であるとする。
【０２６６】
このとき、プロセス１５ｆは、［１］第１レコードの作業中の業務アプリケーション名１（１６１Ｎ１）、作業中の業務アプリケーション名２（１６１Ｎ２）、作業中の業務アプリケーション名３（１６１Ｎ３）、・・・を順に調べ、クリアされている（未使用）のものを探す。
【０２６７】
例えば、作業中の業務アプリケーション名１  １６１Ｎ２であったとすると、［２］作業中の業務アプリケーション名１（１６１Ｎ２）に業務アプリケーション名１８２Ｎに対応する値を書き込み、［３］作業中の業務アプリケーション名１の枝番号１６１Ｋ２にマルチタスク時の業務アプリケーション名の枝番号１８２Ｋを書き込む。
【０２６８】
以下は、上述したステップＳ６３０８〜ステップＳ６３０９と同様である。
【０２６９】
すなわち、本実施形態によれば、第２実施形態と同様に、業務アプリケーションの枝番号毎に業務アプリケーションの稼動状態を判断することができ、マルチタスク時のクライアント稼動状態の誤検出を確実に回避することができる。
【０２７０】
（第８の実施の形態）
図４２は、本発明の第８の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステム１ｇの概略構成を示すブロック図である。
【０２７１】
本実施形態のクライアント／サーバシステム１ｇにおいては、サーバ１０のクライアント稼動状態検出プロセス１５ｇが第３実施形態の構成および第６実施形態の構成と異なっており、その他の構成については、第３および第６実施形態の構成と略同等であるため、同一の構成要素については、同一の符号を付してその説明を省略または簡略化する。
【０２７２】
すなわち、本実施形態によれば、プロセス１５ｇは、上述したステップＳ６１の処理（業務開始ログ、業務終了ログ抽出処理）を実行した後、ステップＳ６２ｂの処理として、作業用データファイル１８のレコードに対して、クライアント名・業務アプリケーション名・業務アプリケーション名の枝番号の組毎に最新日時の業務開始のログレコードだけを残し、他のレコードは無効にする。
【０２７３】
本実施形態では、上記ステップＳ６２ｂの処理に特徴を有している。
【０２７４】
すなわち、プロセス１５ｇは、ステップＳ６２ａの処理の詳細として、図４０に示すように、上述したステップＳ６２０１〜Ｓ６２０４の処理を実行した後、対象レコードの業務アプリケーション名には起動下位階層があるか否か判断する（ステップＳ７０００）。
【０２７５】
本実施形態においても、第３実施形態と同様に、図１７に示すように、業務アプリケーション名がアプリケーションＸ（２２）の場合、起動下位階層は、アプリケーションＹ（２３）、アプリケーションＺ（２４）、アプリケーションＵ（２６）、アプリケーションＶ（２７）となる。
【０２７６】
また、業務アプリケーション名がアプリケーションＺ（２４）、アプリケーションＷ（２５）、アプリケーションＵ（２６）、アプリケーションＶ（２７）の場合、起動下位階層はなしとなる。
【０２７７】
すなわち、プロセス１５ｇは、ステップＳ７０００の処理として、最初に、対象業務アプリケーション名の起動下位階層の業務アプリケーション名を起動下位階層情報１７から求める。
【０２７８】
すなわち、プロセス１５ｇは、［１］対象レコードを第１レコード１７１とし、［２］対象レコードの業務アプリケーション名が書き込まれているか調べる。
【０２７９】
例えば、対象レコードが第１レコード１７１であるとすると、プロセス１５ｇは、業務アプリケーション名１７１Ｎが書き込まれていれば［３］へ進み、そうでなければ［６］へ進む。
【０２８０】
業務アプリケーション名１７１Ｎが書き込まれている場合、プロセス１５ｇは、［３］対象レコードの上位階層のアプリケーション名が書き込まれているか調べる。
【０２８１】
例えば、対象レコードが第１レコード１７１であるとし、上位階層の業務アプリケーション名１７１Ｐが書き込まれている場合［４］へ進み、書き込まれていなければ［６］へ進む。
【０２８２】
上位階層の業務アプリケーション１７１Ｐが書き込まれている場合、［４］上位階層の業務アプリケーション名１７１Ｐが対象業務アプリケーション名と一致するかどうか調べる。
【０２８３】
例えば、上位階層の業務アプリケーション名１７１Ｐが該当業務アプリケーション名と一致する場合該当業務アプリケーション名の起動下位階層として業務アプリケーション名１７１Ｎを記憶し、一致しない場合は［５］へ進む。
【０２８４】
一致しない場合、プロセスス１５ｇは、［５］例えば、対象レコードが第１レコードであるとすると、上位階層の業務アプリケーション名１７１Ｐ＝業務アプリケーション名１７ｊＮとなる第ｊレコードを探す。
【０２８５】
次いで、プロセス１５ｇは、ａ．上位階層の業務アプリケーション名１７ｊＰが存在し、対象業務アプリケーション名と一致する場合、業務アプリケーション１４Ｎの起動下位階層として業務アプリケーション名１７１Ｐを記録し［６］へ進む。
【０２８６】
また、プロセス１５ｇは、ｂ．上位階層の業務アプリケーション名１７ｊＰが存在し、対象業務アプリケーション名と一致しない場合、更に、上位階層の業務アプリケーション名１７ｊＰ＝業務アプリケーション名１７ｋＮとなる第ｋレコードを探し、ａに戻る。
【０２８７】
次いで、プロセス１５ｇは、ｃ．上位階層の業務アプリケーション名１７ｊＰが書き込まれていない場合［６］へ進む。
【０２８８】
そして、プロセス１５ｇは、［６］クライアント業務アプリケーション起動下位階層情報の全てのレコードを処理したか否か判断し、全てのレコードを処理した場合［７］へ進み、未処理のレコードが存在する場合、対象レコードを次のレコードとして［２］へ進む。
【０２８９】
プロセス１５ｇは、［７］の処理として、（８）のステップＳ７００１の処理へ移行する。
【０２９０】
なお、上述した処理では、階層が上下四代の階層（親・子・孫・ひ孫）となった場合でも処理できるように記述している。
【０２９１】
そして、プロセス１５ｇは、（８）Ｓ７００１の処理として、作業用データファイル１８の対象レコードより手前の位置に業務アプリケーションの全ての起動下位階層の業務名の業務終了のデータを追加して書き込む。
【０２９２】
例えば、対象レコードが１８Ｌであるとすると、プロセス１５ｇは、［１］対象レコード１８Ｌと第Ｌ−１レコード１８Ｌ−１の間に上記（７）で記憶した業務アプリケーション名の件数分のレコードを挿入する。この場合は業務アプリケーションＹ、業務アプリケーションＺ、業務アプリケーションＵ、業務アプリケーションＶの４件である。
【０２９３】
すなわち、［２］追加したレコードを１８Ｒとすれば、プロセス１５ｇは、クライアント名１８ＲＣとしてクライアント名１８ＬＣに対応する値を書込み、業務アプリケーション名１８ＲＮとして、その４つのレコードに、それぞれ業務アプリケーションＹ、業務アプリケーションＺ、業務アプリケーションＵ、業務アプリケーションＶを１つずつ書込み、さらに、メッセージ番号１８ＲＢとして、業務終了を意味する番号を書込み、次いで、メッセージ文字列１８ＲＭとして業務終了を意味するメッセージ文字列を書き込む。
【０２９４】
そして、プロセス１５ｇは、上述したステップＳ６２０７〜ステップＳ６２０８の処理に移行し、作業ファイル１８の全てのレコードに対して上述した処理を実行する。
【０２９５】
すなわち、本実施形態によれば、クライアントにおいて、業務アプリケーションが再起動されると、そのレコードの位置よりも若い位置に同一の業務アプリケーション名のレコードが存在することになるため、まずそのレコードを無効にし（ステップＳ６２０４）、次いで、無効にした業務アプリケーションに対して起動階層にある全ての業務アプリケーション名に対して、業務終了のデータを追加することができるため、第３実施形態と同様に、上位階層の業務アプリケーションが異常終了（業務終了ログなし）した場合でも、その起動下位階層である全ての業務アプリケーションの状態を正確に把握することができる。
【０２９６】
（第９の実施の形態）
図４５は、本発明の第９の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステム１ｈの概略構成を示すブロック図である。
【０２９７】
本実施形態のクライアント／サーバシステム１ｈにおいては、サーバ１０のクライアント稼動状態検出プロセス１５ｈが第４実施形態の構成および第６実施形態の構成と異なっており、その他の構成については、第３および第６実施形態の構成と略同等であるため、同一の構成要素については、同一の符号を付してその説明を省略または簡略化する。
【０２９８】
すなわち、本実施形態によれば、プロセス１５ｈは、ステップＳ６１ｂの処理として、業務開始ログおよび業務終了ログに加えて、業務立上ログ抽出処理を行なうようになっており、次いで、ステップＳ６２ｃの処理として、作業用データファイル１８のレコードに対して、クライアント名・業務アプリケーション名・業務アプリケーション名の枝番号の組毎に最新日時の業務開始のログレコードだけを残し、他のレコードは無効にする処理を行なっている。
【０２９９】
すなわち、プロセス１５ｈは、上述したステップＳ６１０１〜ステップＳ６１０２の処理を行なった後、ステップＳ７００５の処理として、業務ログは業務開始ログ、業務終了ログ、業務立上ログの何れかであるか否か判断する。
【０３００】
この判断の結果、対象レコードが業務開始ログ、業務終了ログ、業務立上ログの何れかである場合には、次のステップＳ７００６に移行し、対象レコードが業務開始ログ、業務終了ログ、業務立上ログの何れでもない場合には、上述したステップＳ６１０５の処理に移行する。
【０３０１】
ステップＳ７００６において、プロセス１５ｈは、対象レコード、すなわち、業務開始ログ、業務終了ログ、業務立上ログの何れかのログデータを作業用データファイル１８に書き込む（第１レコードから順にデータを書き込む）。
【０３０２】
このように、本実施形態の作業用データファイル１８には、業務開始ログ、業務終了ログおよび業務立上ログだけが抽出されて書き込まれる。
【０３０３】
このとき、本実施形態のステップＳ６２ｃの処理（最新日時の業務開始のログレコード抽出処理）として、上述したステップＳ６２０１〜Ｓ６２０３の処理を実行した後、すなわち、対象レコードが業務開始でない場合において、メッセージ番号１８ＬＢが業務終了か否か判断し（ステップＳ７１００）、業務終了であった場合には（ステップＳ７１００→ＹＥＳ）、対象レコードの位置より若いレコード全てのレコードのうち、そのクライアント名・業務アプリケーション名が対象レコードの値と一致するものを全て無効にする（ステップＳ７１０１）。
【０３０４】
一方、ステップＳ７１００の判断の結果、業務終了でない場合には（ステップＳ７１００→ＮＯ）、プロセス１５ｈは、対象レコードを業務立上ログと判断し、ステップＳ６２０５の処理として、対象レコードの位置より若いレコード全てのレコードのうち、そのクライアント名と業務アプリケーション名が対象レコードの値と一致するものを全て無効にする。
【０３０５】
例えば、対象レコードが第Ｌレコード１８Ｌであるとすると対象レコードの位置より若いレコードは、第Ｌ−１レコード、第Ｌ−２レコード、・・・、第３レコード、第２レコード、第１レコードとなる。
【０３０６】
すなわち、プロセス１５ｈは、［１］第１レコード１８１から第Ｌ−１レコード１８Ｌ−１に対して、クライアント名１８ｉＣ＝クライアント名１８ＬＣ、かつ業務アプリケーション名１８ｉＮ＝業務アプリケーション名１８ＬＮ、が成り立つ全てのレコードｉ（１８ｉ）のレコードをクリアにする（無効にする）。
【０３０７】
続いて、プロセス１５ｈは、ステップＳ６２０６の処理として、対象レコードを無効にする。
【０３０８】
例えば、対象レコードが第Ｌレコード１８Ｌであるとすると、［１］第Ｌレコード１８Ｌのレコードをクリアにする（無効にする）。
【０３０９】
次いで、プロセス１５ｈは、ステップＳ６２０７の処理として、作業用データファイル１８の対象レコードを次のレコードとする。
【０３１０】
すなわち、例えば、現在の対象レコードが第Ｌレコード１８Ｌであるとすると、次のレコードは１つ手前の第Ｌ−１レコード１８Ｌ−１となる。
【０３１１】
そして、プロセス１５ｈは、ステップＳ６２０８の処理として、作業用データファイル１８の全てのレコードに対して処理したか否か判断し、［１］対象レコードとして第１レコードまで処理したら処理を終了し、未処理のレコードが作業用データファイル１８に存在すれば、（２）ステップＳ６２０２の処理へ移行して上述した処理を繰り返す。
【０３１２】
この結果、作業用データファイル１８には、業務終了ログおよび業務立上ログが除かれた最新日時の業務開始ログ１４のみが残される。
【０３１３】
以上述べたように、本実施形態によれば、例えば、業務アプリケーションＹおよびＺの上位階層である業務アプリケーションＸが異常終了して、クライアントの稼動状態が不正確になった場合に、クライアントが立上られると（業務立上ログ１４がクライアント業務ログファイル１３に登録）、ステップＳ６２０３、ステップＳ７１００の判断はそれぞれＮＯとなり、ステップＳ６２０５の処理により、対象レコードに対応する業務アプリケーションに対して下位の起動階層にある全ての業務アプリケーション名に対応するレコードを無効にすることができるため、第４実施形態と同様に、クライアント稼動状態テーブル１６を介して、異常終了したクライアントの稼動状態を正確に把握することができる。
【０３１４】
（第１０の実施の形態）
図４７は、本発明の第１０の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステム１ｉの概略構成を示すブロック図である。
【０３１５】
本実施形態のクライアント／サーバシステム１ｉにおいては、サーバ１０のクライアント稼動状態検出プロセス１５ｉおよび作業用データファイル１８ｂがそれぞれ第５実施形態の構成および第６実施形態の構成と異なっており、その他の構成については、第５および第６実施形態の構成と略同等であるため、同一の構成要素については、同一の符号を付してその説明を省略または簡略化する。
【０３１６】
図４８は、本実施形態の作業用データファイル１８ｂの構成例を示す図であり、図４８に示すように、作業用データファイル１８ｂには、そのデータファイルに対する登録日時を含む業務開始ログおよび業務終了ログが順次第１レコード、第２レコード、・・・として書き込まれる（登録される）。
【０３１７】
図４９は、本実施形態のクライアント稼動状態テーブル１６ｄの構成例を示す図である。
【０３１８】
図４９に示すように、クライアント稼動状態テーブル１６ｉには、稼動状態のクライアント名１６１Ｃ、クライアントの更新日時を表すデータ１６１Ｔ、クライアントの状態（稼動中／非稼動）を表すデータ１６１Ｓ、そのクライアント作業中の業務アプリケーション名１（１６１Ｎ１）、その作業中の業務アプリケーション名１の作業開始日時１６１ＮＴ１および作業中の業務アプリケーション名１の作業放出検出有無情報〜作業中の業務アプリケーション名４（１６１Ｎ４）、その作業中の業務アプリケーション名４（１６１ＮＴ４）および作業中の業務アプリケーション名１の作業放出検出有無情報・・・が順次第１レコード、第２レコード、・・・として記憶されるようになっている。
【０３１９】
そして、本実施形態によれば、プロセス１５ｉは、図５０に示すように、上述したステップＳ６３０１〜Ｓ６３０５の処理を実行した後、第５実施形態のステップＳ４０に対応するステップＳ７２００の処理として、クライアント稼動状態テーブル１６の該当レコード内の日時情報に作業用データファイル１８ｂの対象レコードの値を書き込む。
【０３２０】
例えば、作業用データファイル１８ｂの対象レコードが第２レコード１８２であり、クライアント稼動状態テーブル１６の該当レコードが第１レコード１６１であるとすると、プロセス１５ｉは、［１］第１レコードの作業中の業務アプリケーション名１の作業開始日時１６２Ｎ１Ｔに対して登録日時１８２Ｔの値を書込み、次いで、［２］第１レコードの状態更新日時１６２Ｔに対して登録日時１８２Ｔの値を書き込む。
【０３２１】
以下、ステップＳ６３０６の処理により、クライアント稼動状態テーブル１６の該当レコード内のクライアントの状態が「稼動中」に設定される。
【０３２２】
一方、第１実施形態のステップＳ７〜ステップＳ８に対応するステップＳ６３０７の処理として、クライアント稼動状態テーブル１６の該当レコード内の作業中の業務アプリケーション名に作業用データファイルの対象レコードの値が書き込まれた際に、プロセス１５ｉは、第５実施形態のステップＳ４１に対応するステップＳ７２０１の処理として、クライアント稼動状態テーブル１６の該当レコード内の日時情報に作業用データファイル１８ｂの対象レコードの値を書き込む。
【０３２３】
例えば、作業用データファイル１８ｂの対象レコードが第２レコード１８２であり、クライアント稼動状態テーブル１６の該当レコードが第１レコード１６１であるとすると、プロセス１５ｉは、［１］第１レコードの作業中の業務アプリケーション名１の作業開始日時１６２Ｎ１Ｔに対して登録日時１８２Ｔの値を書込み、次いで、［２］第１レコードの状態更新日時１６２Ｔに対して登録日時１８２Ｔの値を書き込む。
【０３２４】
以下、プロセス１５ｉは、ステップＳ６３０８の処理として、作業用データファイル１８の対象レコードを次のレコードとし、ステップＳ６３０９の処理として、作業用データファイル１８ｂの全てのレコードに対して処理したか否か判断する。そして、全てのレコードに対する処理を終了したら、ステップＳ７２０２の処理へ移行し、未処理のレコードが作業用データファイル１８ｂに存在すれば、ステップＳ６３０３の処理へ移行して上述した処理を繰り返す。
【０３２５】
そして、プロセス１５ｉは、ステップＳ７２０２の処理として、前掲図３０の運用管理端末１００の処理と同様に、次の処理を行なう。
【０３２６】
［１］クライアント稼動状態テーブル１６ｉの第１レコード１６１を対象レコードとする。
【０３２７】
［２］例えば第１レコード１６１が対象レコードであるとする。
＜１＞対象を作業中の業務アプリケーション名１（１６１Ｎ１）とする。
＜２＞対象の作業中の業務アプリケーション名が書き込まれているか調べる。
例えば、対象が業務アプリケーション名１であれば、作業中の業務アプリケーション名１（１６１Ｎ１）が書き込まれているかどうか調べる。
このとき、書き込まれている場合は、作業中の業務アプリケーション名１の作業開始日時１６１Ｎ１Ｔと現在時刻との差を求め、＜３＞へ進み、また、書き込まれていない場合は、＜４＞へ進む。
＜３＞差が一定値より大きかった場合、対象の業務アプリケーション名に対応した作業放置検出有無を検出有りに設定する。
例えば、対象が作業中の業務アプリケーション名１であるとすれば、作業中の業務アプリケーション名１の作業放置検出有無１６１Ｎ１Ｗを検出有りにする。
＜４＞該当レコード内の全ての業務アプリケーション名について処理したかどうか調べる。
このとき、該当レコード内の全ての業務アプリケーション名について処理が済んだ場合では、＜５＞へ進み、一方、未処理の業務アプリケーション名がＡＲ場合には、次の業務アプリケーション名を対象として＜２＞へ進む。
例えば対象が業務アプリケーション名１であるとすれば、次の対象は業務アプリケーション名２となる。
＜５＞クライアント稼動状態テーブル１６ｉの全てのレコードを処理したかどうか調べる。
このとき、未処理のレコードが存在する場合には、プロセス１５ｉは、対象レコードを次のレコード（例えば、対象が第１レコードであれば次のレコードを第２レード１６２）にして＜２＞へ進み、再度、＜２＞〜＜５＞の処理を行なう。
＜６＞一方、未処理のレコードが存在しない場合には、プロセス１５ｉは、クライアント稼動状態テーブル１６ｉ、すなわち、放置状態と判断された業務アプリケーションには作業放置検出有データが付与された状態のクライアント稼動状態テーブル１６ｉをクライアント稼動状態表示用データとして画面上に表示して、その処理を終了する。
【０３２８】
すなわち、本実施形態によれば、クライアントの各業務アプリケーションの作業開始日時と現在日時との差が一定値を超えた場合、言い換えれば、作業放置状態が一定時間を超えた場合において、その業務アプリケーションに作業放置検出有データを付与し、作業放置検出有データを付与した状態のクライアント稼動状態を表すデータを画面上に表示することができるため、その表示データに基づいて、サーバ１０から対応するクライアントに対して、作業放置を警告するためのデータを通知することができ、クライアント側の業務アプリケーション放置状態を回避することができる。
【０３２９】
なお、上述した各実施形態では、サーバ１０を１つのサーバとしたが、本発明はこれに限定されるものではなく、複数のサーバに対しても適用可能である。
【０３３０】
また、上述した各実施形態では、クライアント稼動状態把握システム（クライアント稼動状態把握用プログラム、把握機能）を、サーバ１０側に搭載したが、本発明はこれに限定されるものではなく、クライアント側に搭載することも可能である。
【０３３１】
【発明の効果】
以上述べたように、本発明に係るクライアント稼動状態把握方法およびシステム、ならびにクライアント稼動状態把握用プログラムによれば、クライアントの業務アプリケーション実行過程で発生する業務ログにおける業務開始ログおよび業務終了ログの内の少なくとも一方を利用して、クライアントの稼動状態を把握することができるため、クライアント側に稼動状態の検出機構、サーバとの稼動状態の通信機構およびサーバ側にクライアントとの稼動状態通信機構を特別に組み込む必要がなくなる。
【０３３２】
したがって、クライアント自体およびサーバ自体に組み込まれた機構に基づく処理負荷および稼動状態通信に基づく通信回線への処理負荷をなくし、クライアントの本来の業務アプリケーション処理の速度およびクライアントとサーバとの間の通信路を介した通信速度をそれぞれ向上させることができる。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステムの概略構成を示すブロック図。
【図２】第１の実施形態における１件分の業務ログのデータ構成を概念的に示す図。
【図３】第１の実施形態における業務ログファイルの構成例を示す図。
【図４】第１の実施形態におけるクライアント稼動状態テーブルの構成例を示す図。
【図５】第１の実施形態におけるサーバのクライアント稼動状態検出プロセスの処理の一例を示す概略フローチャート。
【図６】第１の実施形態におけるサーバのクライアント稼動状態検出プロセスの処理の一例を示す概略フローチャート。
【図７】サーバのクライアント稼動状態検出プロセスにおけるステップＳ１〜ステップＳ１４の処理に基づくクライアント稼動状態の検出結果を示す図。
【図８】本発明の第２の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステムの概略構成を示すブロック図。
【図９】第２の実施形態における１件分の業務ログ１４のデータ構成を概念的に示す図。
【図１０】第２の実施形態の業務ログファイルの構成例を示す図。
【図１１】第２の実施形態のクライアント稼動状態テーブルの構成例を示す図。
【図１２】第２の実施形態におけるサーバのクライアント稼動状態検出プロセスの処理の一例を示す概略フローチャート。
【図１３】第２の実施形態におけるサーバのクライアント稼動状態検出プロセスの処理の一例を示す概略フローチャート。
【図１４】第２実施形態に係るサーバのクライアント稼動状態検出プロセスの処理に基づくクライアント稼動状態の検出結果を示す図。
【図１５】第１実施形態で説明したサーバのクライアント稼動状態検出プロセスの処理をマルチタスク時に適用した場合のクライアント稼動状態検出結果を示す図。
【図１６】本発明の第３の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステムの概略構成を示すブロック図。
【図１７】第３の実施形態における業務アプリケーションの起動階層構造を示す図。
【図１８】第３の実施形態におけるサーバに記憶された起動下位階層情報テーブルの構成例を示す図。
【図１９】第３の実施形態におけるサーバのクライアント稼動状態検出プロセスの処理の一例を示す概略フローチャート。
【図２０】第３実施形態に係るサーバのクライアント稼動状態検出プロセスの処理に基づくクライアント稼動状態の検出結果を示す図。
【図２１】第１実施形態で説明したクライアント稼動状態検出プロセスの処理において、クライアントの業務アプリケーションが異常終了した場合でのクライアント稼動状態検出結果を示す図。
【図２２】本発明の第４の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステムの概略構成を示すブロック図。
【図２３】第４の実施形態におけるサーバのクライアント稼動状態検出プロセスの処理の一例を示す概略フローチャート。
【図２４】第４実施形態に係るサーバのクライアント稼動状態検出プロセスの処理に基づくクライアント稼動状態の検出結果を示す図。
【図２５】本発明の第５の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステムの概略構成を示すブロック図。
【図２６】第５の実施形態における１件分の業務ログのデータ構成を概念的に示す図。
【図２７】第５の実施形態のクライアント稼動状態テーブルの構成例を示す図。
【図２８】第５の実施形態におけるサーバのクライアント稼動状態検出プロセスの処理の一例を示す概略フローチャート。
【図２９】第５の実施形態におけるサーバのクライアント稼動状態検出プロセスの処理の一例を示す概略フローチャート。
【図３０】第５の実施形態における運用管理端末のクライアント稼動状態表示機能に基づく動作を示すフローチャート。
【図３１】本発明の第６の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステムの概略構成を示すブロック図。
【図３２】第６の実施形態におけるサーバのクライアント稼動状態検出プロセスの処理の一例を示す概略フローチャート。
【図３３】第６の実施形態のクライアント稼動状態検出プロセスのステップＳ６１の処理を詳細に説明するためのフローチャート。
【図３４】第６の実施形態における作業用データファイルの構成例を示す図。
【図３５】第６の実施形態のクライアント稼動状態検出プロセスのステップＳ６２の処理を詳細に説明するためのフローチャート。
【図３６】第６の実施形態のクライアント稼動状態検出プロセスのステップＳ６３の処理を詳細に説明するためのフローチャート。
【図３７】本発明の第７の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステムの概略構成を示すブロック図。
【図３８】第７の実施形態の作業用データファイルの構成例を示す図。
【図３９】第７の実施形態におけるサーバのクライアント稼動状態検出プロセスの処理の一例を示す概略フローチャート。
【図４０】第７の実施形態のクライアント稼動状態検出プロセスのステップＳ６２ａの処理を詳細に説明するためのフローチャート。
【図４１】第７の実施形態のクライアント稼動状態検出プロセスのステップＳ６３の処理を詳細に説明するためのフローチャート。
【図４２】本発明の第８の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステムの概略構成を示すブロック図。
【図４３】第８の実施形態のクライアント稼動状態検出プロセスのステップＳ６２ｂの処理を詳細に説明するためのフローチャート。
【図４４】本発明の第９の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステムの概略構成を示すブロック図。
【図４５】第９の実施形態のクライアント稼動状態検出プロセスのステップＳ６１ｂの処理を詳細に説明するためのフローチャート。
【図４６】第９の実施形態のクライアント稼動状態検出プロセスのステップＳ６２ｃの処理を詳細に説明するためのフローチャート。
【図４７】本発明の第１０の実施の形態に係るクライアント稼動状態把握システムを含むクライアント／サーバシステムの概略構成を示すブロック図。
【図４８】第１０の実施の形態の作業用データファイルの構成例を示す図。
【図４９】第１０の実施形態のクライアント稼動状態テーブルの構成例を示す図。
【図５０】第１０の実施形態のクライアント稼動状態検出プロセスのステップＳ６３の処理を詳細に説明するためのフローチャート。
【符号の説明】
１、１ａ〜１ｉ  クライアント／サーバシステム
１０  サーバ
１１  クライアントとの通信プロセス
１２、１２ａ  クライアントの業務ログ登録プロセス
１３、１３ａ  クライアントの業務ログファイル
１４、１４ａ、１４ｂ  １件分の業務ログ
１５、１５ａ、１５ｂ、１５ｃ、１５ｄ、１５ｅ、１５ｆ、１５ｇ、１５ｈ、１５ｉ  クライアント稼動状態検出プロセス
１６、１６ａ、１６ｂ、１６ｃ、１６ｉ  クライアント稼動状態テーブル
１７  クライアント業務アプリケーション起動下位階層情報テーブル
１８、１８ａ、１８ｂ  作業用データファイル
２０  クライアント＃１
２１  サーバとの通信プロセス
２２  業務アプリケーションプロセスＸ
２２ａ１  業務アプリケーションプロセスＸ−１
２２ａ２  業務アプリケーションプロセスＸ−２
２３  業務アプリケーションプロセスＹ
２３ａ１  業務アプリケーションプロセスＹ−１
２３ａ２  業務アプリケーションプロセスＹ−２
２４  業務アプリケーションプロセスＺ
２５  業務アプリケーションプロセスＷ
３０  クライアント＃２
４０  クライアント＃３
１００  運用管理端末
１０１クライアント稼動状態表示機能
【図１】
0003943851.tif 000002
【図２】
0003943851.tif 000003
【図３】
0003943851.tif 000004
【図４】
0003943851.tif 000005
【図５】
0003943851.tif 000006
【図６】
0003943851.tif 000007
【図７】
0003943851.tif 000008
【図８】
0003943851.tif 000009
【図９】
0003943851.tif 000010
【図１０】
0003943851.tif 000011
【図１１】
0003943851.tif 000012
【図１２】
0003943851.tif 000013
【図１３】
0003943851.tif 000014
【図１４】
0003943851.tif 000015
【図１５】
0003943851.tif 000016
【図１６】
0003943851.tif 000017
【図１７】
0003943851.tif 000018
【図１８】
0003943851.tif 000019
【図１９】
0003943851.tif 000020
【図２０】
0003943851.tif 000021
【図２１】
0003943851.tif 000022
【図２２】
0003943851.tif 000023
【図２３】
0003943851.tif 000024
【図２４】
0003943851.tif 000025
【図２５】
0003943851.tif 000026
【図２６】
0003943851.tif 000027
【図２７】
0003943851.tif 000028
【図２８】
0003943851.tif 000029
【図２９】
0003943851.tif 000030
【図３０】
0003943851.tif 000031
【図３１】
0003943851.tif 000032
【図３２】
0003943851.tif 000033
【図３３】
0003943851.tif 000034
【図３４】
0003943851.tif 000035
【図３５】
0003943851.tif 000036
【図３６】
0003943851.tif 000037
【図３７】
0003943851.tif 000038
【図３８】
0003943851.tif 000039
【図３９】
0003943851.tif 000040
【図４０】
0003943851.tif 000041
【図４１】
0003943851.tif 000042
【図４２】
0003943851.tif 000043
【図４３】
0003943851.tif 000044
【図４４】
0003943851.tif 000045
【図４５】
0003943851.tif 000046
【図４６】
0003943851.tif 000047
【図４７】
0003943851.tif 000048
【図４８】
0003943851.tif 000049
【図４９】
0003943851.tif 000050
【図５０】
0003943851.tif 000051