linux pid文件
2015-09-14 11:43
791 查看
在Linux系统的目录/var/run下面一般我们都会看到很多的*.pid文件
作用
防止进程启动多个副本
有写入权限(F_WRLCK)的进程才能正常启动并把自身的PID写入该文件中
fcntl
F_GETLK 取得文件锁定的状态
F_SETLK 设置文件锁定的状态。此时flcok 结构的l_type 值必须是F_RDLCK、F_WRLCK或F_UNLCK
F_SETLKW F_SETLK 作用相同,但是无法建立锁定时,此调用会一直等到锁定动作成功为止
l_type 有三种状态:
F_RDLCK 建立一个供读取用的锁定
F_WRLCK 建立一个供写入用的锁定
F_UNLCK 删除之前建立的锁定
l_whence 也有三种方式:
SEEK_SET 以文件开头为锁定的起始位置
SEEK_CUR 以目前文件读写位置为锁定的起始位置
SEEK_END 以文件结尾为锁定的起始位置
l_start 表示相对l_whence位置的偏移量,两者一起确定锁定区域的开始位置
l_len表示锁定区域的长度,若果为0表示从起点(由l_whence和 l_start决定的开始位置)开始直到最大可能偏移量为止
举例
作用
防止进程启动多个副本
有写入权限(F_WRLCK)的进程才能正常启动并把自身的PID写入该文件中
fcntl
int fcntl(int fd, int cmd, ... /* arg */ ); int fcntl(int fd, int cmd, struct flock *lock);
F_GETLK 取得文件锁定的状态
F_SETLK 设置文件锁定的状态。此时flcok 结构的l_type 值必须是F_RDLCK、F_WRLCK或F_UNLCK
F_SETLKW F_SETLK 作用相同,但是无法建立锁定时,此调用会一直等到锁定动作成功为止
struct flock { ... short l_type; /* Type of lock: F_RDLCK, F_WRLCK, F_UNLCK */ short l_whence; /* How to interpret l_start: SEEK_SET, SEEK_CUR, SEEK_END */ off_t l_start; /* Starting offset for lock */ off_t l_len; /* Number of bytes to lock */ pid_t l_pid; /* PID of process blocking our lock (F_GETLK only) */ ... };
l_type 有三种状态:
F_RDLCK 建立一个供读取用的锁定
F_WRLCK 建立一个供写入用的锁定
F_UNLCK 删除之前建立的锁定
l_whence 也有三种方式:
SEEK_SET 以文件开头为锁定的起始位置
SEEK_CUR 以目前文件读写位置为锁定的起始位置
SEEK_END 以文件结尾为锁定的起始位置
l_start 表示相对l_whence位置的偏移量,两者一起确定锁定区域的开始位置
l_len表示锁定区域的长度,若果为0表示从起点(由l_whence和 l_start决定的开始位置)开始直到最大可能偏移量为止
举例
int fd = open("aa", O_CREAT | O_RDWR, 0777); struct flock lock; lock.l_type = F_WRLCK; lock.l_whence = SEEK_SET; lock.l_start = 1; lock.l_len = 10; fcntl(fd, F_SETLKW, &lock); if(fork() == 0) { struct flock lock; lock.l_type = F_WRLCK; lock.l_whence = SEEK_SET; lock.l_start = 1; lock.l_len = 10; fcntl(fd, F_SETLKW, &lock); } puts("done."); pause();
相关文章推荐
- Linux主机下安装Mysql数据库
- init: Id "co" respawning too fast: disabled for 5 minutes
- Linux chmod命令详解
- Linux下的tar压缩解压缩命令详解
- fileinput模块
- Linux下的crontab命令使用特别须注意的地方
- 每天一个linux命令(28):tar命令
- Linux下防止ddos攻击
- CentOS下MySQL忘记root密码解决方法【转载】
- linux下创建,删除,移动文件命令
- linux中级教程-权限机制
- 学习Linux第一天
- 一些有用的linux命令
- linux下mysql安装、目录结构、配置
- Linux 重定向
- linux连接iscsi存储方法
- linux下iSCSI的连接总结
- 查看Linux上CPU信息
- Linux下添加新硬盘,分区及挂载
- Linux系统中清理文件和清理环境变量的方法