`
siwind
  • 浏览: 143793 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux/unix下 pid文件作用浅析

阅读更多
    在linux系统的目录/var/run下面一般我们都会看到很多的*.pid文件。而且往往新安装的程序在运行后也会在/var/run目录下面产生自己的pid文件。那么这些pid文件有什么作用呢?它的内容又是什么呢?

(1) pid文件的内容:pid文件为文本文件,内容只有一行, 记录了该进程的ID。
用cat命令可以看到。
(2) pid文件的作用:防止进程启动多个副本。只有获得pid文件(固定路径固定文件名)写入权限(F_WRLCK)的进程才能正常启动并把自身的PID写入该文件中。其它同一个程序的多余进程则自动退出。

(3) 编程技巧
    调用fcntl设置pid文件的锁定F_SETLK状态,其中锁定的标志位F_WRLCK。
    如果成功锁定,则写入进程当前PID,进程继续往下执行。
    如果锁定不成功,说明已经有同样的进程在运行了,当前进程结束退出。

============

lock.l_type = F_WRLCK;
lock.l_whence = SEEK_SET;

if (fcntl(fd, F_SETLK, &lock) < 0){
    //锁定不成功, 退出......
}
sprintf (buf, "%d\n", (int) pid);
pidsize = strlen(buf);
if ((tmp = write (fd, buf, pidsize)) != (int)pidsize){
    //写入不成功, 退出......
}




(4) 一些注意事项
    i) 如果进程退出,则该进程加的锁自动失效。
    ii) 如果进程关闭了该文件描述符fd, 则加的锁失效。(整个进程运行期间不能关闭此文件描述符)
    iii) 锁的状态不会被子进程继承。如果进程关闭则锁失效而不管子进程是否在运行
(Locks are associated with processes. A process can only have one kind of lock set for each byte of a given file. When any file descriptor for that file is closed by the process, all of the locks that process holds on that file are released, even if the locks were made using other descriptors that remain open. Likewise, locks are released when a process exits, and are not inherited by child processes created using fork.)

(5) 参考资料
fcntl(文件锁)
表头文件 #include <unistd.h>
#include <fcntl.h>
函数定义int fcntl(int fd, int cmd, struct flock *lock);
函数解释fd:文件描写符
设置的文件描写符,参数cmd代表欲垄断的号召
F_DUPFD
复制参数fd的文件描写符,厉行获胜则归来新复制的文件描写符,
F_GETFD
获得close-on-exec符号,若些符号的FD_CLOEXEC位为0,代表在调用
exec()相干函数时文件将不会关闭
F_SETFD 设置close-on-exec符号,该符号以参数arg的 FD_CLOEXEC位定夺
F_GETFL获得open()设置的符号
F_SETFL改换open()设置的符号
F_GETLK获得文件锁定的事态,依据lock的描写,定夺是否上文件锁
F_SETLK设置文件锁定的事态,此刻flcok,构造的l_tpye值定然是F_RDLCK、F_WRLCK或F_UNLCK,
万一无法发生锁定,则归来-1
F_SETLKW 是F_SETLK的阻塞版本,在无法获得锁时会进去睡眠事态,万一能够获得锁可能捉拿到信号则归来
参数lock指针为flock构造指针定义如下
struct flock {
...
short l_typejngaoy.com;
short l_whence;
off_t l_start; 锁定区域的开关位置
off_t l_len; 锁定区域的大小
pid_t l_pid; 锁定动作的历程
...
};
1_type有三种事态:
F_RDLCK读取锁(分享锁)
F_WRLCK写入锁(排斥锁)
F_UNLCK解锁
l_whence也有三种措施
SEEK_SET以文件开始为锁定的起始位置
SEEK_CUR以现在文件读写位置为锁定的起始位置
SEEK_END以文件尾为锁定的起始位置
归来值 获胜则归来0,若有讹谬则归来-1
l_len:加锁区的长度
l_pid:具有阻塞目前历程的锁,其持有历程的历程号储藏在l_pid中,由F_GETLK归来
等闲是将l_start设置为0,l_whence设置为SEEK_SET,l_len设置为0
   
2
2
分享到:
评论

相关推荐

    Linux/Unix下pid文件作用浅析

    Linux/Unix下pid文件作用浅析 Linux/Unix下pid文件是一种特殊的文件,用于记录进程的ID,并防止进程启动多个副本。下面是pid文件的详细介绍: pid文件的内容 pid文件是一个文本文件,内容只有一行,记录了该进程...

    Linux/UNIX系统编程手册源码

    1. **UNIX/Linux系统接口**:在UNIX和Linux系统中,程序员通常通过系统调用来与操作系统进行通信。这些调用包括打开、关闭文件,读写数据,创建和管理进程,以及处理网络通信等。例如,`open()`用于打开文件,`read...

    Linux/UNIX系统编程手册课后习题代码

    《Linux/UNIX系统编程手册》是一本经典的教材,它深入浅出地介绍了Linux和UNIX操作系统下的编程接口。这本书涵盖了各种核心API,包括文件操作、进程管理、网络通信、信号处理等,是学习系统级编程的重要参考资料。...

    linux/unix系统编程手册(下)

    《Linux/Unix系统编程手册(下)》是深入理解Linux和Unix操作系统内核与系统编程不可或缺的参考书籍。这本书详细阐述了在这些操作系统环境下进行程序设计、系统调用、网络编程以及文件操作等方面的关键概念和技术。 ...

    linux/unix网络编程-甘刚,,linux编程.ppt

    ,linux编程.ppt,linux编程.ppt,linux编程.ppt,linux编程.ppt,linux编程.ppt,linux编程.ppt,linux编程.ppt,linux编程.ppt,linux编程.ppt

    Linux/UNIX系统编程手册(源代码)

    信号是Linux/UNIX系统中的一种异步事件通知机制,如`SIGINT`(中断)用于处理用户按下Ctrl+C,`SIGSEGV`(段错误)用于捕获非法内存访问。 10. **权限与安全**: 文件和目录的权限控制是系统安全的基础。`chmod`...

    用Linux/UNIX Shell编程语言设计系统监控程序.pdf

    在Linux/UNIX环境中,命令who可以显示当前系统中工作的用户与文件系统情况,但是为了将这些信息显示出来,需要使用过滤器awk提取行中信息。命令df可以检查文件系统的情况,显示设备名、文件系统类型、容量、已用容量...

    linux/unix系统编程手册附录代码

    - `fork()`: 创建新进程,是Unix/Linux编程中最基本的函数之一。 - `execve()`: 在已存在的进程中替换其执行映像,加载新的程序。 - `wait()` 和 `waitpid()`: 等待子进程结束并获取其退出状态。 - `signal()`, ...

    asm.zip_Linux/Unix编程

    这些文件内容的综合学习将帮助开发者深入理解Linux/Unix系统下的网络编程、GUI开发、系统级通信以及资源定位。每个主题都是一个独立的知识点,结合起来能构建出一个全面的Linux/Unix编程技能树。

    Linux-UNIX系统编程手册.pdf

    此外,它还详细说明了Linux专有特性如epoll、inotify和/proc文件系统,以及UNIX标准(POSIX.1-2001/SUSv3和POSIX.1-2008/SUSv4)的内容,这使得该手册不仅适用于Linux平台,同样对于在其他UNIX平台下工作的程序员也...

    Linux/Unix系统自学教程

    在IT领域,Linux和Unix系统是两种非常重要的操作系统,尤其在服务器端和开发环境中广泛应用。这份"Linux/Unix系统自学教程"将引导你逐步掌握这两种强大的操作系统的核心概念和实用技能。 首先,我们要明白Linux和...

    LINUX.UNIX系统编程手册(下册)

    《linux/unix系统编程手册(上、下册)》总共分为64章,主要讲解了高效读写文件,对信号、时钟和定时器的运用,创建进程、执行程序,编写安全的应用程序,运用posix线程技术编写多线程程序,创建和使用共享库,运用...

    linux/unix 系统编程手册

    《Linux/Unix 系统编程手册》是一本深入探讨Linux和Unix系统编程的权威著作,由德国专家Michael Kerrisk撰写,并由孙剑等翻译成中文,由人民邮电出版社出版。这本书涵盖了广泛的系统编程主题,旨在帮助开发者理解和...

    《LINUX/UNIX系统编程手册 上》.((德)Michael Kerrisk ).part2

    《LINUX/UNIX系统编程手册 上》.((德)Michael Kerrisk ),经典的linux/unix下c语言编程手册,分上下册,每册有150M,由于上传权限,是能把每册分割成3份上传

    RSGLXT-master_Linux/Unix编程_

    Linux/Unix的文件系统强大而灵活,支持文件权限管理,这对于敏感的员工档案信息至关重要。开发者可能利用数据库管理系统(如MySQL、PostgreSQL)存储和检索员工信息,确保数据的安全性和一致性。同时,通过shell脚本...

    Linux/UNIX系统编程手册 源码

    《Linux/UNIX系统编程手册》是一本深受程序员和系统管理员喜爱的经典著作,它详细阐述了在Linux和UNIX操作系统上进行系统级编程的各种技术。源码是书籍内容的实践部分,对于学习和理解书中的概念至关重要。这个...

    XMS.rar_Linux/Unix编程

    【标题】"XMS.rar_Linux/Unix编程" 涉及的是在Linux或Unix操作系统环境下进行程序开发的知识,特别是与Delphi相关的编程实践。在Linux/Unix系统中,编程通常涉及C语言或C++,但这个特定的案例中提到了“Hand C SMS ...

    Linux/UNIX系统编程手册.part2

    《Linux/UNIX系统编程手册(上、下册)》总共分为64章,主要讲解了高效读写文件,对信号、时钟和定时器的运用,创建进程、执行程序,编写安全的应用程序,运用POSIX线程技术编写多线程程序,创建和使用共享库,运用...

    Linux/UNIX系统编程手册.part1

    《Linux/UNIX系统编程手册(上、下册)》总共分为64章,主要讲解了高效读写文件,对信号、时钟和定时器的运用,创建进程、执行程序,编写安全的应用程序,运用POSIX线程技术编写多线程程序,创建和使用共享库,运用...

    Linux/UNIX系统编程手册 上册

    《linux/unix系统编程手册(上、下册)》总共分为64章,主要讲解了高效读写文件,对信号、时钟和定时器的运用,创建进程、执行程序,编写安全的应用程序,运用posix线程技术编写多线程程序,创建和使用共享库,运用...

Global site tag (gtag.js) - Google Analytics