How to avoid multiple instances of a program?

♀尐吖头ヾ 提交于 2019-11-30 13:37:31

There are numerous ways:

  1. have an "instance file" in /var/run or similar (cross-platform)
  2. use a fixed socket (cross-platform)
  3. 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.

For linux, see the answer from jldupont. For windows, use the CreateMutex-method, to create a named mutex. See: http://msdn.microsoft.com/en-us/library/ms686927%28VS.85%29.aspx

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!