C/C アプリケーションのインスタンスが一度に 1 つだけ実行されるようにするにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-01 05:28:27
オリジナル
409 人が閲覧しました

How to Ensure Only One Instance of a C/C   Application Runs at a Time?

C または C を使用した単一インスタンス アプリケーションの作成

アプリケーションのインスタンスを 1 つだけ確実に同時に実行するには、考慮すべきさまざまな手法があります。 。以下にいくつかのオプションとその利点を示します。

ファイル ロック:
1 つの方法は、ファイル ロックを使用することです。アプリケーションによって一意のファイルが作成され、アプリケーションが実行されると、このファイルに対する排他ロックが取得されます。別のインスタンスが実行しようとすると、ロックの取得に失敗し、インスタンスがすでに実行中であることを示します。

Mutex:
Mutex は、複数のスレッドまたはプロセスを許可する同期オブジェクトです。競合することなく共有リソースに安全にアクセスできます。この場合、ミューテックスを使用して、実行中のアプリケーションへのアクセスを制御できます。最初のインスタンスがミューテックスを取得すると、ミューテックスが解放されるまで、後続のインスタンスはすべてブロックされます。

Unix ドメイン ソケット:
一意の名前を持つ Unix ドメイン ソケットの作成とバインド別の方法です。アプリケーションの最初のインスタンスはソケットに正常にバインドされます。別のインスタンスが同じ名前にバインドしようとすると失敗しますが、既存のソケットに接続して最初のインスタンスと通信できます。

実装例:

ここにあります。ファイル ロックを使用した実装例:

<code class="c">#include <sys/file.h>
#include <errno.h>

int main() {
    int pid_file = open("/var/run/my_app.pid", O_CREAT | O_RDWR, 0666);
    int rc = flock(pid_file, LOCK_EX | LOCK_NB);

    if (rc) {
        if (EWOULDBLOCK == errno) {
            // Another instance is running
            return 1;
        }
    } else {
        // This is the first instance
    }

    // Perform application logic
    return 0;
}</code>
ログイン後にコピー

このアプローチにより、アプリケーションのインスタンスが 1 つだけ実行されることが保証され、古い pid ファイルを処理できるという利点があります。

以上がC/C アプリケーションのインスタンスが一度に 1 つだけ実行されるようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!