单实例程序即程序只有一个执行程序,ruby编写的脚本程序怎么做到这个功能呢?

我是这样来解决这样这个问题的,每次脚本跑起来后是通过系统查询进程是否有多个相同的运行的实例,如果有则杀掉除第一个启动的所有进程。具体代码如下:

#保留最早启动的一个交换服务
defself.keep_first_switcher_srv()
#查找系统,找到所有的交换服务
info=IO.popen(%q{wmicprocesswhere"CommandLinelike'%switcher_master%'andCaptionlike'%ruby%'"getCreationDate,Handle})
data_info=[]
info.readlines.eachdo|line|
if(line=~/\d/)
data_info<<line.strip.split
end
end
#如果找到多个交换服务,则杀掉所有后启动的交换服务,保留最先启动的交换服务
if(data_info.size>1)
min=data_info.map{|item|item[0]}.min
data_info.eachdo|line|
if(!line.include?(min))
`taskkill/f/pid#{line[1]}/t`
end
end
end
end

核心代码:

wmicprocesswhere"CommandLinelike'%switcher_master%'andCaptionlike'%ruby%'"getCreationDate,Handle

运行这条命令来查询:程序的启动命令含有ruby和swithcer_master的命令的进程,返回进程的创建时间和进程id句柄号。