2

アプリケーションの以前のインスタンスがすでに実行されているかどうかを判断できるCコードを作成する方法はありますか?LinuxとWindowsの場合、どちらも利用可能な最新バージョンのGCCを使用して、これを移植可能な方法で確認する必要があります。

ポータブルコードの例は非常に役立ちます。現在、2つのオプションがあります。

  1. プロセスリストを確認してください。ここでLinuxには優れたツールがありますが、同じ機能がWindowsに適用されるとは思いません。多分両方のSOのためのいくつかのgnuライブラリ?どのライブラリ、または関数ですか?
  2. ファイルを保存してロックします。では、両方のシステムが理解できる方法でそれを行うにはどうすればよいでしょうか。1つの問題は、ファイルをどこに保存するかです。パスツリーはシステムごとに異なります。また、相対パスが選択されている場合でも、2つのアプリケーションは、異なるディレクトリにある異なるロックされたファイルで実行できます。

ありがとう!ベコ。

PS。SOにはさまざまな要件があるため、1つを知っていて、もう1つを知らない場合は、答えてください。結局のところ、移植可能な「単一の」方法がない場合でも、#ifdefと回答として提案されたコードを使用できる可能性があります。

C言語(c ++ではない)、コンソールアプリケーション、gcc、Linux、およびWindows

4

4 に答える 4

2

Windowsの場合、ミューテックスが適切に機能します。

http://msdn.microsoft.com/en-us/library/ms682411(v=vs.85).aspx

この記事では、ミューテックスの代替案についても言及しています。

アプリケーションをユーザーごとに1つのインスタンスに制限するには、ユーザーのプロファイルディレクトリにロックされたファイルを作成します。

于 2011-04-08T02:05:14.487 に答える
2

残念ながら、自分をCに制限すると、これを移植的に行うのが困難になる可能性があります。C ++では、ブーストインタープロセスのnamed_mutexがありますが、Cでは、次のいずれかを行う必要があります。

  • UNIX(Mac OSを含む):どこかでファイルを開いて群がらせます従来は、現在のPIDもこのファイルに書き込みます。注:これはNFSでは安全ではない可能性があります。しかし、とにかくあなたの選択肢は非常に限られています。Linuxでは、/dev/shmローカルで安全にロックできるようにする場合は、パスを使用できます。
  • Windows:名前付きミューテックスを開いてロックする
于 2011-05-24T20:30:52.933 に答える
1

Unixlandの標準的な方法の一種は、プロセスに独自のPIDを既知の場所にあるファイルに書き込むことです。このファイルが存在する場合、プログラムはそのファイル内のpid(システムコールで使用可能)をチェックできます。よくわからない場合は、別のプロセスが実行されていることがわかります。

于 2011-04-08T02:15:36.727 に答える
0

Cは、アプリケーションがすでに実行されているかどうかを確認するための組み込み機能を提供しないため、クロスプラットフォームにすることは困難/不可能です。ただし、LinuxではIPCを使用できます。また、Windows(このカテゴリの経験はあまりありません)では、これが役立つ場合があります。

于 2011-04-08T02:06:42.110 に答える