Monday, May 24, 2010

记一次开源软件原理追查

有这种dig行为, 主要是本人想写完一篇笔记, 是关于xxx.pid文件与锁的文章。
在实际和自己了解的情况中, 掌握的东西不够多, 所以就dig下去了。

在shell中, 如果要得到文件锁,在debian系的distro下可以使用这个包:  lockfile-progs

ubuntu下已经预装
http://packages.qa.debian.org/l/lockfile-progs.html

因为一直对lock file 和 file lock这两个名词纠结不清, 所以就下载源代码(还好, 很简短)来看

发现使用了liblockfile库, 视线被转到这一个library上, 首先想到的是找这个库的文档

dpkg -l|grep lockfile
得到:
liblockfile1

dpkg -L liblockfile1
只有一份man手册,是关于随liblockfile1包发布的dotlockfile程序的说明。

嗯, 至少比没有好吧.....man之

不过很有意思的是从这份手册里看到一点线索:
The above mentioned lockfile_create(3) manpage is present in the liblockfile-dev package.

呵呵, lockfile_create 这个API的手册在dev包里, 马上apt-get安装

lockfile_create API手册里有一节叫ALGORITHM的。 其实这一节已经说明了原理和流程了(从man手册里的文字转成流程还是需要很细心地阅读)
我对其它的 "A check is made to see if the existing lockfile is a valid one" 不是很明白, 所以找了lockfile_check函数的代码看, 这里就不贴代码了(还是wordpress写blog好呀~~)
代码可以出下面的地址得到:
 * http://liblockfile.sourcearchive.com/documentation/1.06.1/lockfile_8c-source.html

lockfile_check函数的判断有两个:
1. lock file中保存PID号代表的进程是否还存在, 通过kill函数得到。 (用法与xxx.pid文件类似, 关于xxx.pid用法, 本人别起笔记)
2. 如果lock file 中保存的pid号为0, 则与5分钟为lock file生命期。


No comments:

Post a Comment

Note: Only a member of this blog may post a comment.