http://qs321.pair.com?node_id=11134286


in reply to Re: singleton lock not reliable
in thread singleton lock not reliable

I've done one better. I've added a singleton() method. Its specifically designed to prevent more than one instance of any script (or processes that share the same shared memory segment). It's trivial to use, as it hides all of the various flags:

use IPC::Shareable; IPC::Shareable->singleton('LOCK'); # Do scripty perl stuff here

That's it. You can now be guaranteed that if a second instance of the script starts, it'll exit gracefully immediately as soon as singleton() is called.

You can also tell it to emit a notice that the script is exiting by sending in a true value as the second 'warn' param:

IPC::Shareable->singleton('LOCK', 1);

If a second instance is run, the following will be thrown:

Process ID 14784 exited due to exclusive shared memory collision

Version 1.03 has this update.