View Full Version : singola istanza in Linux
trallallero
04-06-2007, 08:56
Qualcuno sa su linux come fare per creare un mutex su un eseguibile.
Cioe´, il programma parte ma come prima cosa controlla se c´e´ gia´ un´istanza che sta girando. Se si esce. Senno´ continua.
Non possiamo farlo con file di lock perche´ se crasha ed il file non viene rimosso son ...caxxi :stordita:
E´ che stiamo facendo del software per un dispositivo senza monitor quindi la vedo dura ad eliminare un file :D
Mi ricordo che era semplicissimo in windows con le api
grazie
Qualcuno sa su linux come fare per creare un mutex su un eseguibile.
Cioe´, il programma parte ma come prima cosa controlla se c´e´ gia´ un´istanza che sta girando. Se si esce. Senno´ continua.Boh, mi vengono in mente alcune possibilità:
- Usare i semafori, vedi le funzioni semctl/semget/semop
- Usare i socket
Leggi anche questo PDF (http://www.advancedlinuxprogramming.com/alp-folder/alp-ch05-ipc.pdf)
ilsensine
04-06-2007, 09:30
Non possiamo farlo con file di lock perche´ se crasha ed il file non viene rimosso son ...caxxi :stordita:
Sì che potete farlo con dei file lock. V. man flock o man fcntl.
Un modo un pò più complicato fa uso di file senza lock, creati in maniera atomica con hard link a file temporanei, che contengono all'interno il pid del processo creante (che può quindi essere controllato per verificare che sia ancora in esecuzione). Molti demoni usano questa tecnica. V. /var/run/*.pid
trallallero
04-06-2007, 09:39
grazie, do un´occhiata al tutto.
Certo che certe volte dici: evviva Windows e le sue Api :D
trallallero
04-06-2007, 09:51
Sì che potete farlo con dei file lock. V. man flock o man fcntl.
in effetti (http://www.dbforums.com/archive/index.php/t-1334230.html):
Open a lock file and try to get an exclusive flock or a write fcntl lock.
if the attempt fails, the program is already running. Otherwise this is
the running copy; keep the lock file open: that keeps the file system
busy, and on process termination, for any reason whatsoever, the kernel
frees the lock for you.
non sapevo che il kernel fosse cosi´ furbo :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.