![]() | 1 knightdf 2016-10-31 11:06:27 +08:00 ![]() 1,写 pid 2,检查进程 |
![]() | 2 firebroo 2016-10-31 11:21:40 +08:00 via Android ![]() pid |
3 mooncakejs 2016-10-31 11:25:19 +08:00 ![]() 在 /tmp 目录下 创建一个独占文件,不能独占就说明有实例存在 |
![]() | 4 tt0411 2016-10-31 11:33:13 +08:00 ![]() 独占一个端口 |
![]() | 5 LazyZhu 2016-10-31 11:36:24 +08:00 ![]() Linux 一般用 /run/lock or /var/run 等目录的 .lock 来管理。 |
6 eslizn 2016-10-31 11:43:19 +08:00 ![]() 进程互斥锁 |
![]() | 7 tabris17 2016-10-31 11:44:25 +08:00 ![]() CreateMutex |
8 dearmymy 2016-10-31 11:45:58 +08:00 ![]() 1,findwindow 2,互斥锁 |
![]() | 9 Clarencep 2016-10-31 12:14:18 +08:00 ![]() 文件锁+1 文件锁比较通用。 |
10 paw 2016-10-31 13:01:32 +08:00 ![]() 命名管道也行,检查管道存在,而且还可以用来传送新启动进程的参数 |
11 lxm 2016-10-31 15:44:54 +08:00 ![]() flock |
12 chenzhiwei 2016-10-31 15:58:11 +08:00 via Android ![]() 可以用 dbus API ,类似这样的: dbus.SessionBus().request_name(xxx) 每次启动都先检查这个东西 |
13 TaMud 2016-10-31 15:58:26 +08:00 ![]() pid 写入文件 启动检测文件里的 pid 是否在运行,是否同一个程序名称 |
14 windydays 2016-10-31 18:10:20 +08:00 ![]() 一般是用 flock(), O_CREAT|O_RDWR 打开一个文件,然后 flock( LOCK_EX|LOCK_NB ) http://stackoverflow.com/questions/2964391/preventing-multiple-process-instances-on-linux http://stackoverflow.com/questions/5339200/how-to-create-a-single-instance-application-in-c-or-c https://github.com/qtproject/qt-solutions/tree/master/qtsingleapplication/src |
15 wshn13 2016-10-31 18:22:20 +08:00 @chenzhiwei 对 我们就是这样做过 |
![]() | 16 likuku 2016-10-31 18:26:41 +08:00 简单的,可以先运行个系统的 ps 配合 awk,grep,wc 统计当前系统有多少个同名进程,大于 1 即 执行 sys.exit() |
![]() | 17 lijianying10 2016-10-31 18:38:40 +08:00 ![]() 为什么不写成服务呢? 比如说用 systemd 或者 supervisor 托管起来。这样就可以在主机内可限定进程数量的运行了。还不用改你的脚本。 |
18 a86913179 2016-10-31 18:48:49 +08:00 ![]() lockfile=/var/tmp/mylock if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null; then trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT # do stuff here # clean up after yourself, and release your trap rm -f "$lockfile" trap - INT TERM EXIT else echo "Lock Exists: $lockfile owned by $(cat $lockfile)" fi |
19 jimzhong 2016-10-31 19:04:03 +08:00 ![]() 在 Linux 下可以用文件锁 |
![]() | 20 clino 2016-10-31 19:46:04 +08:00 via Android ![]() 还有个方法是监听某个固定端口 |
![]() | 21 eloah OP 非常感谢各位~ |
![]() | 22 xshwy 2016-11-05 02:08:46 +08:00 from python_pid import PidFile # 没有文件的话,会自动创建,文件名可以随意,不用后缀也可以 file = PidFile('/var/tmp/balabala.lock') # 如果文件没有被加锁,会加锁成功; # 如果文件已经被加锁,会抛出异常,如果不做处理将会自动退出,可以达到只存在一个实例的要求 # 异常内容是: Process id 14336 Already running , pid to balabala file.acquire() |
![]() | 23 xshwy 2016-11-05 02:12:23 +08:00 22L 内容 在 Python3 测试成功, py2 没试过。 |