2009-12-14 27 views
7

(Python) programımın iki çalışan örneğini engellemek için doğru bir yol bulmalıyım. Şu anda aşağıdaki yöntemi kullanıyorum. Windows'ta Bir programın birden çok örneğini nasıl önleyebilirim?

, Linux'ta

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

,

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

Şimdilik iyi çalışıyor görünüyor. Bu yöntem doğru mu? Birisi bana daha iyi bir yol önerebilir mi?

düzenleme: Yanıt veren çocuklar için teşekkürler, Yukarıdaki yöntemlerden herhangi biri yanlış mı? Linux için pid dosyası yolunu denedim. Ya pid dosyası bir şekilde silinirse?

+1

Kopyala: http://stackoverflow.com/questions/380870/python-single-instance-of-program –

+0

İlgili: http://stackoverflow.com/questions/220525/ensuring-a-single-instance-of -an-application-in-linux # 221159 –

+0

Bu temelde [python-one-instance-program] 'ın bir kopyasıdır (http://stackoverflow.com/questions/380870/python-single-instance-of- program) sorusu. –

cevap

5

çok çeşitli yollar vardır:

  1. /var/çalıştırmak ya da benzeri (çapraz platform) bir "örneği dosya"
  2. sabit soket kullanımı (platformlar arası)
  3. kullanımı DBus sahip benzersiz kimlikleri & mevcut uygulamalara tabidir bir ad alanı yöneten bir isim (linux)

ne gerek (uygulamanıza harici) bir hizmettir kayıt.

1

Linux üzerinde, ben kabaca bir PidFile yazmak için kullandı:

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 

son zamanlarda, hep şeffaf flock(1) aracın duydu. İt's kolay bash komut kullanmak: Çok sert

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

ve sadece bir dosya açın, 'gerçek' programlama dilleri kullanmak ve üzerinde bir flock(2) elde etmeye çalışmak için.

İlgili konular