如何在linux下让程序只运行一个实例???

时间:2021-10-20 04:43:48
如何在linux下让程序在内存中只运行一个实例???希望能给出实现思路。。。

13 个解决方案

#1


文件锁。进程运行时新建一个文件,独占锁,如果第二次运行,open文件失败,进程退出。

共享内存,类似处理。

#2


可以加锁一个特定文件来实现,如果特定文件已存在就表示已有实例。
不过要考虑程序非正常退出的情况。
也可以绑定某个socket端口。
也可以使用特定共享内存地址。
总之可以用任何全局的信息来实现。

#3


最经济的做法是创建一个信号量,pv操作就可以保证了。

#4


怎么才能用独占的方式打开一个文件,其他进程打开时失败??
open()用哪个标志位 O_EXCL,O_WRONLY,O_RDWR??????

#5


文件锁

#6


解决了,用别人的代码。。

#7


方法比较多,用信号灯或者其他的标示都可以解决

#8


任何内核对象

SOCKET, SEMAPHORE, MUTEX FILE DESCRIBER, SHARED MEMORY, FILE LOCK, .......................................................

#9


mark

#10


楼主,把代码贴出来呀

#11


一般是开始运行程序把pid写入文件如:/var/run/server.pid,
先判断有没有文件如果有就把pid读出来,然后kill 。

#12


一般是开始运行程序把pid写入文件如:/var/run/server.pid,
先判断有没有文件如果有就把pid读出来,然后kill 。
========================================================
如果程序异常终止了,文件还存在。 其他进程使用了该pid,这样kill不是有问题了么?

#13


ps -aux 找进程名也可以

#1


文件锁。进程运行时新建一个文件,独占锁,如果第二次运行,open文件失败,进程退出。

共享内存,类似处理。

#2


可以加锁一个特定文件来实现,如果特定文件已存在就表示已有实例。
不过要考虑程序非正常退出的情况。
也可以绑定某个socket端口。
也可以使用特定共享内存地址。
总之可以用任何全局的信息来实现。

#3


最经济的做法是创建一个信号量,pv操作就可以保证了。

#4


怎么才能用独占的方式打开一个文件,其他进程打开时失败??
open()用哪个标志位 O_EXCL,O_WRONLY,O_RDWR??????

#5


文件锁

#6


解决了,用别人的代码。。

#7


方法比较多,用信号灯或者其他的标示都可以解决

#8


任何内核对象

SOCKET, SEMAPHORE, MUTEX FILE DESCRIBER, SHARED MEMORY, FILE LOCK, .......................................................

#9


mark

#10


楼主,把代码贴出来呀

#11


一般是开始运行程序把pid写入文件如:/var/run/server.pid,
先判断有没有文件如果有就把pid读出来,然后kill 。

#12


一般是开始运行程序把pid写入文件如:/var/run/server.pid,
先判断有没有文件如果有就把pid读出来,然后kill 。
========================================================
如果程序异常终止了,文件还存在。 其他进程使用了该pid,这样kill不是有问题了么?

#13


ps -aux 找进程名也可以