(1) pid文件的内容:pid文件为文本文件,内容只有一行, 记录了该进程的ID。 用cat命令可以看到。 (2) pid文件的作用:防止进程启动多个副本。只有获得pid文件(固定路径固定文件名)写入权限(F_WRLCK)的进程才能正常启动并把自身的PID写入该文件中。其它同一个程序的多余进程则自动退出。 (3) 编程技巧: 调用fcntl设置pid文件的锁定F_SETLK状态,其中锁定的标志位F_WRLCK。 如果成功锁定,则写入进程当前PID,进程继续往下执行。 如果锁定不成功,说明已经有同样的进程在运行了,当前进程结束退出。 1 lock.l_type = F_WRLCK;
2 lock.l_whence = SEEK_SET;
3 if (fcntl(fd, F_SETLK, &lock) < 0)
4 {
5 //锁定不成功
6 }
7 sprintf (buf, "%d\n", (int) pid);
8 pidsize = strlen(buf);
9 if ((tmp = write (fd, buf, pidsize)) != (int)pidsize)
10 {
11 //写入不成功
12 }
13
(4) 一些注意事项: i) 如果进程退出,则该进程加的锁自动失效。 ii) 如果进程关闭了该文件描述符fd, 则加的锁失效。(整个进程运行期间不能关闭此文件描述符) iii) 锁的状态不会被子进程继承。如果进程关闭则锁失效而不管子进程是否在运行。
阅读(3228) | 评论(0) | 转发(0) |