|
今天在csdn上看到用这种方法监视程序运行,觉得不错,想改造为ACE的。
发现调用 ACE_OS::fcntl ,flockXXXX的例子很少,不理解,那位朋友有兴趣帮我改改吗?
另:看到论坛上有说给wachterdog,发包来判断是否活的程序的,有例子可以提供吗?谢谢!
下面就举一个文件锁(file lock)的用法,向来不喜欢大段的函数参数格式说明,如果你想详细了解文件锁,请查阅相关文档。
服务器程
序当然不会无缘无故就死掉,除了受到人为攻击的原因,多是程序bug所致,经过长时间(如果允许)测试修正,纠正了大量的bug,服务器程序已经很稳定
了。服务器程序还会崩溃吗?没有人敢说不会,实际就是这样。那好,程序发布的最后阶段就因该是实现服务程序的崩溃自启动。
原理很简单:服务器程序
开始运行时先锁定一个文件,程序正常情况不释放该锁,当程序因故崩溃时Unix系统将自动释放该锁。由此我们可以设计另一个单独的监听程序,它在主程序锁
定锁文件后去锁定同样的文件,那么根据文件锁的性质,此锁定要求将被系统阻塞,当主程序崩溃释放文件锁时,监听程序将获得文件锁,继续执行,在此加入重新
启动主程序的命令即可。
主程序的开始处
...
- int fd;
- fd=open(lockfilename,O_WRONLY|O_CREAT,0600);
- flock(fd,LOCK_EX);//互斥锁
- ...
- 监听程序的部分内容
- ...
- int fd=-1;
- fd=open(lockfilename,O_WRONLY|O_RDONLY);
- flock(fd,LOCK_EX);//互斥锁
- sleep(2);
- flock(fd,LOCK_UN);
- system(...);//运行主程序
复制代码 |
|