
On utilise la variable SUDO_USER et sinon on se rabat sur un getuid darcs-hash:20040910192447-41617-51511e6987093eae4473592bde71fa0bd73f0151.gz
50 lines
1.2 KiB
Python
Executable file
50 lines
1.2 KiB
Python
Executable file
#!/usr/bin/env python
|
|
# -*- coding: iso-8859-15 -*-
|
|
|
|
""" Gestion de lock
|
|
|
|
Copyright (C) Frédéric Pauget
|
|
Licence : GPLv2
|
|
"""
|
|
|
|
import os,string,time,sys, affich_tools
|
|
|
|
def make_lock(lock_name, lock_comment='') :
|
|
""" Création d'un lock """
|
|
lock_file = '/var/lock/' + lock_name
|
|
if os.path.isfile(lock_file) :
|
|
### Lock existant
|
|
|
|
# Lecture du lock
|
|
fd = open(lock_file, "r")
|
|
pid= fd.readline().strip()
|
|
fd.close()
|
|
|
|
# Informations sur le processus lockant
|
|
if os.system( "ps %s > /dev/null 2>&1" % pid ) :
|
|
# Le script lockant ne tourne plus
|
|
os.remove(lock_file)
|
|
else :
|
|
# Il faut attendre
|
|
a = affich_tools.anim('\tattente du lock')
|
|
for i in range(8) :
|
|
time.sleep(1)
|
|
a.cycle()
|
|
sys.stdout.write('\r')
|
|
return make_lock(lock_name, lock_comment)
|
|
|
|
### Prise du lock
|
|
lock_fd=open(lock_file, "w")
|
|
lock_fd.write("%s\n%s" % (os.getpid(), lock_comment) )
|
|
lock_fd.close()
|
|
|
|
def remove_lock( lock_name ) :
|
|
""" Destruction du lock """
|
|
lock_file = '/var/lock/' + lock_name
|
|
try :
|
|
fd = open(lock_file, "r")
|
|
if fd.readline().strip()=="%s" % os.getpid():
|
|
os.remove(lock_file)
|
|
fd.close()
|
|
except :
|
|
None
|