Mutexハンドルの強制終了(C# と VB.NET の質問掲示板)より:
Mutexのハンドルを、別プロセスから強制終了するにはどのようにしたらよいでしょうか?
そのアプリはVC++で作られているそうなのですが、ソースもなく担当者も現在いない状況です。
客先常駐の御用聞きPG的な業務のため、件の対応で運用が改善されるのであれば工数も頂けるので対応したいと思っております。
元々社内にいたPG好きの方が片手間な作ったもので、きちんとした工程で製造>納品されたものではなく、引き継げる人材がいない環境も考えられ仕方ないかと思っています。
なんて言うか、怖い。とっても、怖いよぉ...
まず、客先との業務形態。「偽装請負」のにおいがしますね...請負であれば、契約書が必要です。業務の発注は、リーダーを通して行わねばならず、下っ端に直接指示はできません。
次に、「開発元」が、開発したものを管理していない、という現状がかいま見えます。
さらに、客の無理を何とかできてしまったスーパー プログラマーが、契約とか何とか関係なしに「ホイホイ」と作り、会社がタッチすることなく「納品」してしまう。これの怖いところを自覚していないところが、何とも...終わってますね。
そして、機能が用意された目的を知らず、副作用を本来の目的と思っているように見えます。つまり、mutex は相互排他アクセスを行うための機構です。複数のプロセス(スレッド)が、同じリソースをアクセスする場合、一つのプロセスがリソースに書き込んでいるとき、読み取っているときに、他のプロセスが読み取ったり、書き込んだりすると、リソースの整合性が破綻します。Windows では、相互排他アクセスのための機構がいくつか用意されており、mutex はその一つです。アプリケーションの多重起動防止に mutex が使われるのは、この排他制御を応用(つまり、アプリケーション)に過ぎません。
もし、元のプログラムを作った人が、本来の意味、すなわち、何かのリソースへのアクセスをシーケンシャルにするために mutex を使っているなら、複数のプロセスで同時にリソース操作が発生しない限り、アプリケーションはあやしい動き
を見せることなく、動作するでしょう。しかし、本来一つのプロセスからしかアクセスできないはずのリソースに複数のプロセスが同時にアクセスしたとき。このとき、アプリケーションがどうなるかは、実際にやってみないとわかりません。
知らなかったことは、そう悪いことではないと思います。誰だって、最初は知らないのですから。でも、知る機会を無にする、知ろうとしないことは、大きな罪ではないでしょうか。
投稿日時 : 2008年4月9日 21:40