4

プログラムをインスタンスのみの実行に制限するにはどうすればよいですか?現在、プログラムをデーモンとして実行しています(自動的に開始および停止します)。ユーザーがクリックして再起動しようとすると(これは有効なユースケースではありません)、プロセスはユーザーコンテキストで起動されます。これは、さまざまな理由で回避したいと思います。 。

どうすればこれを達成できますか?

今のところ、プロセスのリストを取得し、いくつかのチェックを実行して、最初から終了していますが、このメソッドは問題を解決しますが、クリーンではありません。

誰かが私にもっと良い解決策を与えることができますか?そして、私はプロセスリストを取得するためにpsを使用していますが、これを実行するための信頼できるAPIはありますか?

4

1 に答える 1

4

カウントが1の名前付きセマフォを使用します。起動時に、このセマフォが使用されているかどうかを確認します。そうである場合は、終了します。そうでなければ、それを取る。

概念実証コード:(アプリケーションのエントリポイントの近くに配置)

#include <semaphore.h>
...
if (sem_open(<UUID string for my app>, O_CREAT, 600, 1) == SEM_FAILED) {
  exit(0);
}

sem_openドキュメントから、

返されたセマフォ記述子は、sem_close()で閉じられるまで、または呼び出し元が終了または実行されるまで、呼び出し元のプロセスで使用できます。

于 2012-09-06T10:24:14.743 に答える