Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1829294
  • 博文数量: 286
  • 博客积分: 3713
  • 博客等级: 少校
  • 技术积分: 2275
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-11 09:47
个人简介

http://blog.chinaunix.net/uid/16979052.html

文章分类

全部博文(286)

文章存档

2018年(1)

2017年(16)

2016年(9)

2015年(17)

2014年(15)

2013年(112)

2012年(116)

分类: LINUX

2013-01-07 09:45:08

(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) |
给主人留下些什么吧!~~