in reply to Re^2: Windows process
in thread Windows process

You mean this?

# This is a trick used to prevent concurrent applications # from running, but that will work WITHOUT needing pid # or lock files, and so is kill -9 or power failure safe. # To work it needs a __DATA__ section to be defined at # the end of the file. use Fcntl 'LOCK_EX', 'LOCK_NB'; unless ( flock DATA, LOCK_EX | LOCK_NB ) { # An existing instance of this application is already running print STDERR "Program is already running\n"; exit(0); } __DATA__ Used as a lock to prevent concurrent execution. Do not remove this data section.


Of course, I'm not sure how well it would work on Win32, but I'm sure there's an equivalent

Replies are listed 'Best First'.
Re^4: Windows process
by BrowserUk (Patriarch) on Sep 18, 2004 at 13:03 UTC

    That wasn't the variation that I thought I remembered, but it seems to work fine--if not quite how I expected*--under win32.

    *It certainly prevents a second copy of the script from being run, but for reasons I dont understand yet, you don't get to see the "Program is already running\n"; message. Leastwise, not without playing games with sleeps and stuff. But it does work to the extent that if I start a script in one session and the switch to another and try again, the second attempt terminates immediately. Quite why I don't see the error message is beyond my understanding at the moment. Whether this would work across logons or userids etc I'm not sure.

    I'm seem to recall a version that applied the lock using $0, but maybe I'm wrong. I'll have to super search.

    Hmm. Maybe I mis-attributed this. All I can find now is Highlander - allow only one invocation at a time of an expensive CGI script and related articles. I know I saw a mechanism that applied the lock to the script itself somewhere--I was certain it was one of merlyn's.

    Merlyn?

    Update: Seems I did mis-attribute this--though it's maybe understandable given the stolen name :)


    Examine what is said, not who speaks.
    "Efficiency is intelligent laziness." -David Dunham
    "Think for yourself!" - Abigail
    "Memory, processor, disk in that order on the hardware side. Algorithm, algorithm, algorithm on the code side." - tachyon