pidfile 与 logfile的不同

原文答案:http://unix.stackexchange.com/questions/12815/what-are-pid-and-lock-files-for

大意翻译如下:

pidfile 是用户程序正在开始运行期间,将进程ID写进pidfile文件,主要目的有三个:

1.为其他程序或操作系统标识本程序正在运行,或至少启动成功了。

2.如果计划要用kill命令终止进行,它允许一个可写脚本非常容易地检测程序运行状态。

3.有pidfile后,可以用非常少的代价去获取前一个运行实例因何没有退出成功

仅仅存在pidfile并不能保证进程id是否正在运行,这个方法不是100%简单,但对大多数程序来说是足够好的,检测进程id是否在进程表这个方式并不能跨平台使用,除非使用 ps工具。

lockfile 通常用来保证同一程序的两个实例不能同时运行,使用完后别忘记删除这个文件

pid files are written by some programs to record their process ID while they are starting. This has multiple purposes:

  • It‘s a signal to other processes and users of the system that that particular program is running, or at least started successfully.
  • It allows one to write a script really easy to check if it‘s running and issue a plain kill command if one wants to end it.
  • It‘s a cheap way for a program to see if a previous running instance of it did not exit successfully.

Mere presence of a pid file doesn‘t guarantee that that particular process id is running, of course, so this method isn‘t 100% foolproof but "good enough" in a lot of instances. Checking if a particular PID exists in the process table isn‘t totally portable across UNIX-like operating systems unless you want to depend on the ps utility, which may not be desirable to call in all instances (and I believe some UNIX-like operating systems implement ps differently anyway).

Lock files are used by programs to ensure two (well-behaved) separate instances of a program, which may be running concurrently on one system, don‘t access something else at the same time. The idea is before the program accesses its resource, it checks for presence of a lock file, and if the lock file exists, either error out or wait for it to go away. When it doesn‘t exist, the program wanting to "acquire" the resource creates the file, and then other instances that might come across later will wait for this process to be done with it. Of course, this assumes the program "acquiring" the lock does in fact release it and doesn‘t forget to delete the lock file.

This works because the filesystem under all UNIX-like operating systems enforces serialization, which means only one change to the filesystem actually happens at any given time. Sort of like locks with databases and such.

时间: 2024-12-05 01:52:25

pidfile 与 logfile的不同的相关文章

基础入门_Python-模块和包.深入Celery之节点管理/任务调度/任务追踪?

任务管理: 说明: 如上为运行任务后的标准输出,transport为消息代理,concurrency为默认进程池进程数,当所有子进程处于忙碌状态时必须等待空闲子进程处理,如果是IO密集型可尝试使用Eventlet/Gevent协程,具体可参考http://docs.jinkan.org/docs/celery/userguide/concurrency/index.html#concurrency,result为结果存储,queue为所有的队列以及交换机信息列表 参数 含义 %p 节点全名,如[

Centos 6.5 x64 安装tinyproxy http代理

TinyProxy是个非常便利,及容易架设的HTTP代理,和squid相比,tinyproxy更小,更好使用. 线上的一台Google代理服务器用的是meow,也是一款http代理软件.但是有一个缺点,需要后台启动,而且,运行一段时间,进程就会挂掉.所以不得不写个脚本,来监控进程,防止挂掉. 准备搭建一个爬虫服务器,买了一个VPN,可以随时切换IP的.后端PHP程序只需要调用这台的http代理就可以了. http代理不能断,所以选择了tinyproxy. 安装方法,有2中. yum instal

SDN中的开源交换机介绍以及使用

之前关于SDN的开发工作都是在控制器层面上(以ryu为主),现在开始了新的工程项目,需要同时修改控制器和交换机的源码,如果后续项目需要,还可能需要加中间层——网络虚拟层,这部分的知识已经在前面读过了相关论文,有了了解.以前不论是硬件交换机和Mininet中都是用的CPqD,所以在这次首选的交换机是CPqD,读了两天源码之后发现自己的选择错了,对自己的想法也有了很大的改变. 网上能找到的CPqD相关源码的资料非常少非常少(我没有找到),我很晦涩的看了两天(C语言真的不好读),只是对代码有了大概的了

ovs+dpdk numa感知特性验证

0.介绍 本测试是为了验证这篇文章中提到的DPDK的NUMA感知特性. 简单来说,在ovs+dpdk+qemu的环境中,一个虚拟机牵涉到的内存共有三部分: DPDK为vHost User设备分配的Device tracking memory OVS为网络通信分配的mbufs QEMU为虚拟机分配的内存 未开启DPDK的NUMA感知特性时,所有Device tracking memory都会使用同一个NUMA节点中的内存,如果这时QEMU为两台虚拟机分配的内存刚好在两个不同的NUMA节点上,那么机

OVS + kernel datapath 的安装

***kernel datapath的OVS编译安装 下载源代码 $ git clone https://github.com/openvswitch/ovs.git 准备工具:生成configure文件 GNU make $ make --version 一个C语言编译器,GCC 4.6以上,Clang 3.4以上 $ gcc --version libssl $ apt-get isntall libssl1.0.0 libcap-ng0 $ apt-get install libcap-n

OVS + dpdk 安装与实验环境配置

***DPDK datapath的OVS的安装与实验环境配置 首先肯定是DPDK的安装 0:安装必要的工具 make gcc libssl libcap-ng0 libtool autoconf python 2.7 python module six(可用PIP安装) 1:设置hugepages,host最好有4G以上的内存可用, 共搞1024个hugepage,每个page 2M,所以光hugepages就占用2G内存 $  grep Huge /proc/meminfo $ echo 10

OpenvSwitch自动化重新编译和安装

相信使用过OpenvSwitch的人都知道,OpenvSwitch因为要替换一部分linux内核,所以在修改OpenvSwitch源码的时候,每次都需要重新编译和安装,这个过程十分的机械和枯燥,所以写一个小脚本自动实现这个功能,源码见github. 下面可以简单的分析下源码: #remove the old ovs aptitude remove openvswitch-common openvswitch-datapath-dkms openvswitch-controller openvsw

Openstack Nova 二次开发之Nova-extend服务实现并启动验证

 Openstack Nova 二次开发之Nova-extend service 扩展 主要是讲如何启动openstack nova-extend services,该服务用于Openstack 二次扩展及部分需求开发,例如 ,节点巡检,动态迁移(基于FUSE 文件系统实现,分布式系统,如MooseFS),文件注入,Nova 服务的自身修复,instances IO 控制,instances CPU 隔离技术实现等其他需求开发 第一章:如何create openstack nova-extend

#sora#celery worker guide abstract

celery worker guide abstract 启动worker: e.g. celery -A proj worker -l info celery -A proj worker --loglevel=INFO --concurrency=10 -n worker1.%h 备注: The hostname argument can expand the following variables: %h: Hostname including domain name. %n: Hostn