C守护程序 - 释放并删除锁定文件

时间:2015-11-07 17:13:29

标签: c locking daemon

在初始化时使用this webpage中的“被盗”代码在C中守护我的程序时,守护程序会创建一个锁存文件,用于存储进程pid:

:
lfp=open(LOCK_FILE,O_RDWR|O_CREAT,0640);
if (lfp<0) exit(1);                  /* can not open */
if (lockf(lfp,F_TLOCK,0)<0) exit(0); /* can not lock */
sprintf(str,"%d\n",getpid());
write(lfp,str,strlen(str));          /* store pid in file */
:

守护程序终止后,网页似乎没有打扰清理。事实上,在网上搜索我找不到办法解决这个问题 守护程序C代码的所有示例都将创建一个锁文件,但之后不会删除它。 假设我可以捕获SIGTERM并正常退出,我应该如何解锁然后删除pid文件?

2 个答案:

答案 0 :(得分:1)

锁本身会自动释放:

  

reference:   一旦持有锁的进程关闭一些锁,就会释放文件锁   文件的文件描述符。

要删除该文件,您可以使用unlink。我怀疑锁文件是保留的,因为程序的未来调用将重新创建它,从而减少开销。

答案 1 :(得分:0)

您可以使用F_ULOCK明确解锁。从fcntl联机帮助页(由lockf在linux上使用)开始,表明在文件关闭或进程结束时删除了锁。

所以死后守护进程没有任何锁定。它可以打开文件并设置一个新锁。