记录锁与Posix信号量详解
1. 守护进程防止重复启动
守护进程为了防止自身的另一个副本启动,有多种方法。例如,可将进程ID写入文件,若程序进程ID为123,若写入时不截断文件,内容会是 123\n6\n ,为避免文件出现第二行造成混淆,最好避免这种情况。
以下是一个测试示例:
solaris % onedaemon &
start first copy
[ 1 ] 22388
solaris % cat pidfile
check PID written to file
22388
solaris % onedaemon
and try to start a second copy
unable to lock pidfile, is onedaemon already running?
使用这种方法的好处是,许多守护进程本身就会将进程ID写入文件,并且若守护进程意外崩溃,内核会自动释放记录锁。当然,也可以使用信号量来实现同样的功能。
2. 锁文件
2.1 使用 open 函数创建锁文件
Posix.1保证,当使用 O_CREAT (若文件不存在则创建)和 O_EXCL (独占打开)标志调用 open 函数时,如果文件已存在,函数会返回错误。而且,对文件存在性的检查和文件的创建(若不存在)对于其他进程来说必须是原子操作。因此,我们可以将用此技术创建的
超级会员免费看
订阅专栏 解锁全文
599

被折叠的 条评论
为什么被折叠?



