LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1553|回复: 18

怎么让一个程序在同一时间只有一个进程运行?

[复制链接]
发表于 2005-11-1 21:58:35 | 显示全部楼层 |阅读模式
怎么让一个程序在同一时间只有一个进程运行?
如果有新的进程起动,则会自己自动退出。
有什么解决办法,如果有代码最好,我试过一些
方法,不太理想。
也可以告诉我哪个软件是这样作的,我去查其源码。

谢谢谢谢谢谢谢谢谢谢!
发表于 2005-11-1 22:18:51 | 显示全部楼层
不太明白你说的意思,但是我想可以用IPC吧
用消息队列或者信号量什么的吧……
回复 支持 反对

使用道具 举报

发表于 2005-11-1 22:36:56 | 显示全部楼层
最简单的就是进程开始时锁一个自己指定的文件试试,如果文件存在而且锁失败,那么已经在运行,如果文件不存在或者锁成功,那么还没有运行
回复 支持 反对

使用道具 举报

发表于 2005-11-1 22:41:42 | 显示全部楼层
楼上说的锁是什么意思?
回复 支持 反对

使用道具 举报

发表于 2005-11-2 10:11:22 | 显示全部楼层
我觉得可以这样解决不:
   自定义一个独一无二的环境变量,初始值我们将其设置为0,每当启动一个这个程序的进程时其值加一;在程序启动时查询这个环境变量的值为多少,如果为0则可以启动,如果为1则禁止启动,这个道理还可以设置允许启动n个进程。当程序退出时将该环境变量减一以还原!在这个方案中仅仅检查一个环境变量,应该性能不会受任何影响!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-2 10:40:00 | 显示全部楼层
有没有这样的软件?我想读一下代码,谢谢!
回复 支持 反对

使用道具 举报

发表于 2005-11-2 10:47:26 | 显示全部楼层
这还需要读代码么?我觉得道理很简单,只需要处理一个环境变量就可以了。
要对自己充满信心!!!!!!!!
回复 支持 反对

使用道具 举报

发表于 2005-11-2 11:19:00 | 显示全部楼层
Post by anuode
我觉得可以这样解决不:
   自定义一个独一无二的环境变量,初始值我们将其设置为0,每当启动一个这个程序的进程时其值加一;在程序启动时查询这个环境变量的值为多少,如果为0则可以启动,如果为1则禁止启动,这个道理还可以设置允许启动n个进程。当程序退出时将该环境变量减一以还原!在这个方案中仅仅检查一个环境变量,应该性能不会受任何影响!

环境变量在系统中不是唯一的
每个进程都有
每个进程会继承父进程的环境变量
在一个shell里export了某个环境变量,可以影响到它所产生的子进程
可是重开一个shell的话,刚才那个环境变量就鞭长莫及了,我在新shell里可以给它赋新值,甚至unset这个环境变量
回复 支持 反对

使用道具 举报

发表于 2005-11-2 11:20:36 | 显示全部楼层
Post by tigeroar
有没有这样的软件?我想读一下代码,谢谢!

去看apue
advanced I/O
record locking
回复 支持 反对

使用道具 举报

发表于 2005-11-2 12:32:18 | 显示全部楼层
我也明白环境变量的这个特性,就是在回帖时就没注意到,看来缺少实践!!
Sorry!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表