免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3073 | 回复: 8
打印 上一主题 下一主题

c可以禁止程序重复运行吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-13 21:10 |只看该作者 |倒序浏览
俺写个程序不想让程序被重复加载,不知要如何实现。

论坛徽章:
0
2 [报告]
发表于 2004-10-13 21:23 |只看该作者

c可以禁止程序重复运行吗?

用信号量,文件锁,等都可以实现

论坛徽章:
0
3 [报告]
发表于 2004-10-13 21:40 |只看该作者

c可以禁止程序重复运行吗?

啊,能给出关键代码吗?\r\n如果方便的话,给个例子最好了。

论坛徽章:
0
4 [报告]
发表于 2004-10-13 21:46 |只看该作者

c可以禁止程序重复运行吗?

俺想过用共享内存实现,但kill -9下来还是一个样,变成一个程序都加载不了了

论坛徽章:
0
5 [报告]
发表于 2004-10-13 21:49 |只看该作者

c可以禁止程序重复运行吗?

最简单也是最常用的,用文件锁.\r\n比如类似apache的httpd.pid文件\r\n你在程序开始执行的时候判断是否存在一个httpd.pid,如果不存在就启动.\r\n说明没有副本在运行.并且生成一个httpd.pid,然后把程序当前的pid写在里面.\r\n如果存在,说明之前有副本在运行,就退出.\r\n当然,如果对httpd.pid以加锁独占方式打开更好,等程序结束了再解锁

论坛徽章:
0
6 [报告]
发表于 2004-10-13 21:56 |只看该作者

c可以禁止程序重复运行吗?

用kill -9杀掉这个进程之后,这个httpd.pid会不会还存在.\r\nKILL这个信号可是不能忽略也不能捕捉的。

论坛徽章:
0
7 [报告]
发表于 2004-10-13 22:04 |只看该作者

c可以禁止程序重复运行吗?

kill -9是不能捕捉的.\r\n所以httpd.pid还会存在.\r\n但这属于异常情况,好比战争、地震……\r\n一般是TERM信号,你程序收到的时候删掉就是了.\r\n你没必要非要考虑kill -9的情况,很多程序多没办法的.\r\n比如mrtg,使用mrtg.cfg_l加锁,如果你kill -9了,文件还是清除不了.\r\n下次启动的时候就起不来了.\r\n\r\n好多free的软件也都是如此,你就不必过于执着了

论坛徽章:
0
8 [报告]
发表于 2004-10-13 22:07 |只看该作者

c可以禁止程序重复运行吗?

就是啊,但是一般人杀进程都会用kill -9的,如果不用kill -9我用共享内存也可以做了。

论坛徽章:
0
9 [报告]
发表于 2004-10-15 14:55 |只看该作者

c可以禁止程序重复运行吗?

那你程序在启动的时候读取httpd.pid文件,判断系统进程表里有没有这个pid,如果没有,就把它httpd.pid删掉,重新生成一个。\r\n如果有pid在进程表里面,查看描述是不是你的程序,如果不是,把httpd.pid删掉,重新生成一个。\r\n然后就可以把程序起来了。\r\n\r\n如果发现已经运行,那就报错退出
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP