8

(Python) プログラムの 2 つの実行中のインスタンスを防ぐ正しい方法を見つける必要があります。私は現在、次の方法を使用しています。

Windows では、

os.popen('wmic process get caption,processid | findstr `programname.exe`')

Linux では、

os.popen('ps x | grep `programname`')

今のところ問題なく動作しているようです。この方法は正しいですか?誰かが私にもっと良い方法を提案できますか?

編集:返信ありがとうございます。上記の方法で何か問題がありますか? Linux用のpidファイルの方法を試しました。pid ファイルが何らかの理由で削除された場合はどうなりますか?

4

3 に答える 3

5

多くの方法があります:

  1. /var/run などに「インスタンス ファイル」がある (クロスプラットフォーム)
  2. 固定ソケットを使用する (クロスプラットフォーム)
  3. DBus を使用して名前を登録する (Linux)

必要なのは、一意の ID が利用可能で適用される名前空間を管理するサービス (アプリケーションの外部) です。

于 2009-12-14T13:41:45.623 に答える
2

Linuxでは、私はpidfileを大まかに書いていました。

if (pidfile already exists)
    read pidfile content
    if (/proc/<pid>/exec == my executable)
        already running, exit
    else
        it´s a stale pidfile, delete it
write my own pid to pidfile
start the 'real' work

最近、flock(1)ツールについて聞いたことがあります。bashスクリプトで使用する方が簡単です。

( flock -n 200 || exit
    # ... commands executed under lock ...
) 200>/var/lock/mylockfile

「実際の」プログラミング言語から使用するのはそれほど難しくありません。ファイルを開いて、そのファイルにflock(2)を取得してみてください。

于 2009-12-14T14:19:02.900 に答える
1

Linux の場合は、jldupont からの回答を参照してください。Windows の場合、CreateMutex メソッドを使用して、名前付きミューテックスを作成します。参照: http://msdn.microsoft.com/en-us/library/ms686927%28VS.85%29.aspx

于 2009-12-14T13:45:33.243 に答える