LinuxSir.cn,穿越时空的Linuxsir!

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

在LINUX中,如何设计一程序,使其只能运行一次

[复制链接]
发表于 2002-8-31 11:08:52 | 显示全部楼层 |阅读模式
在LINUX中,如何设计一程序,使其只能运行一次。即使用户修改了此文件的名称,该程序也能知道运行一次,第二次运行后自动退出?
 楼主| 发表于 2002-8-31 18:32:39 | 显示全部楼层
我曾经在一个论坛上看到过这样的讨论,时间长了忘了,现在应用需要:软件只能一个在内存里运行,如果运行的程序不退出,再次运行它的话,它发现程序已经运行了,就自动退出。
发表于 2002-9-1 02:10:13 | 显示全部楼层
可以参照daemon的方式,运行后将pid放在/var/run目录下。
 楼主| 发表于 2002-9-1 09:54:13 | 显示全部楼层
实际应用是这样的:现做出一个业务主管的管理程序,业务主管可能多个,而业务主管使用软件,只是对业务系统监控与管理,用的时候并不多,但一天至少运行几次(业务需要),此程序主管运行检查监控完后,就退出了,不需要程序运行。但此程序在运行时,不允许其他主管进来,不然系统要出现问题。显然用daemon的办法不行,它一般是一直在内在中运行的。还有没有其它方法?我正在找解决的办法。
发表于 2002-9-1 10:05:33 | 显示全部楼层
我的意思是第一次运行时,将进程号写进/var/run/下的文件(文件名一般为进程名称)中,以后运行时如果存在此文件就提示并退出。正常退出要delete。
此外还可以利用IPC中的信号灯,原理类似。
 楼主| 发表于 2002-9-1 10:29:44 | 显示全部楼层
信号灯可以采用,因为此程序目前运行不稳定,中途崩溃情况有。如果用文件的话,一旦程序崩溃,则下次将不能进入系统,这种情况即使程序稳定了也有可能出现,因此不能采用文件的方法来控制,因为没有必要要求业务主管在运行不了时去/var/run下手工删除文件。
发表于 2002-9-1 10:37:14 | 显示全部楼层
可以再加一个判断:如果文件存在,则取出进程号,判断是否在运行状态,如果没有进程,说明上次异常退出,删除,然后继续...
有些牵强,但我发现linux下的esound是采用这样的机制,再复杂一点就要用到文件锁了。
 楼主| 发表于 2002-9-1 10:45:31 | 显示全部楼层
可行。不知道还有没有其它更巧妙的办法?
发表于 2002-9-1 10:57:18 | 显示全部楼层
不知道了
windows下也是采用类似的机制(信号灯或临界区),好象也没有更巧妙的办法!
发表于 2002-9-4 17:08:18 | 显示全部楼层
某些著名的软件(apache,mysql)都是采用,运行后把自已的pid号写入到一个文件里面,比如httpd.pid。第二次运行发现存在这个文件,就退出。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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