How to avoid multiple instances of a program?
There are numerous ways:
- have an "instance file" in /var/run or similar (cross-platform)
- use a fixed socket (cross-platform)
- use DBus to register a name (linux)
What you need is a service (external to your application) that manages a namespace where unique ids are available & enforced.
on Linux, I used to write a pidfile, roughly:
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
lately, i´ve heard of the flock(1) tool. it´s easier to use in bash scripts:
( flock -n 200 || exit
# ... commands executed under lock ...
) 200>/var/lock/mylockfile
and not too hard to use from 'real' programming languages, just open a file and try to get a flock(2) on it.