如何确保只运行一个应用程序副本?

时间:2012-05-25 07:29:21

标签: c linux

  

可能重复:
  Preventing multiple process instances on Linux

我有多线程应用程序,可以作为deamon进程运行,也可以使用输入参数运行一次。

我想确保如果应用程序作为deamon进程运行,则不应允许用户再次运行它。

编辑:在你们都建议去寻找鸡群之后,我试了一下并把它放在服务器里。我知道有奇怪的问题,当服务器被退回时,他们会删除所有文件,包括锁定文件:(。现在怎么样?

3 个答案:

答案 0 :(得分:5)

最简单的方法是绑定到一个端口(可以是unix域,在“私有”目录中)只有一个进程可以绑定到端口,所以如果绑定了端口,那么进程在跑。如果进程退出,内核会自动关闭filedescriptor。它会使您的进程花费(未使用的?)文件描述符。通常,守护进程无论如何都需要一些侦听套接字。

答案 1 :(得分:3)

您可以尝试使用file locks。启动该过程后,您可以打开文件,锁定它,并检查值(例如文件大小)。如果它不是所需的值,则该过程可以退出。如果需要,请将文件更改为不需要的值。

答案 2 :(得分:2)

我通过使用shell脚本启动和停止守护程序来实现类似的功能。

在exe调用之前的启动脚本中查看此exe是否仍在运行。如果发现它仍在运行,则不会启动新进程。