C 守护进程 - 释放和删除锁定文件

C daemon - Release and delete a lockfile

当使用 this webpage 中的代码 "stolen" 在 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 代码的示例都将创建一个锁定文件,但 none 随后将其删除。 假设我可以捕获 SIGTERM 并正常退出,我应该如何解锁然后删除 pidfile?

您可以使用 F_ULOCK 明确解锁。顺便说一下,fcntl 联机帮助页(lockf 在 linux 上使用)指出在文件关闭或进程结束时删除锁。

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

锁本身自动释放:

reference: File locks are released as soon as the process holding the locks closes some file descriptor for the file.

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