我最近遇到了一个扩展名为.pid的文件,并在其中进行了探索,但没有找到太多内容.文件说:
Pid-File是包含进程标识号(pid)的文件,该文件存储在文件系统的明确定义的位置中,从而允许其他程序找出正在运行的脚本的pid.
任何人都可以对此有所了解,或者引导我了解pid文件中包含的内容的详细信息?
为了创建单个实例应用程序,您的建议是什么,以便一次只允许一个进程运行?文件锁,互斥还是什么?
Windows可以选择打开具有独占访问权限的文件.Unix没有.
为了确保对某些文件或设备的独占访问,在Unix中通常的做法是使用通常存储在/ var/lock目录中的锁文件.
open( "/var/lock/myLock.lock", O_RDWR | O_CREAT | O_EXCL, 0666 )如果锁定文件已存在,则C指令返回-1,否则创建它.该函数是原子的,确保没有竞争条件.
释放资源后,将通过以下指令删除锁定文件
remove( "/var/lock/myLock.lock" ).
这种方法存在两个问题.
程序可以在不移除锁定的情况下终止.例如,因为它被杀死,崩溃或其他什么.锁定文件保持不变,即使不再使用,也会阻止对资源的任何访问.
锁定文件是使用组和世界写入权限创建的,但通常的做法是将帐户配置为使用将清除组和世界写入权限的权限掩码.因此,如果我们有一个可靠的方法来确定锁是孤立的(不使用),则不允许不是文件所有者的用户将其删除.
为了记录,我使用锁定文件来确保对连接到串行端口的设备(实际上是/ dev/ttyUSBx)的独占访问.咨询方法,需要合作,没关系.但应确保不同用户之间的独占访问.
是否有比锁文件更好的同步方法?如何确定创建锁文件的进程是否仍在运行?如果不使用,如何让其他用户删除锁定文件?
我想出的一个解决方案是将该文件用作Unix套接字文件.如果文件存在,请尝试使用该文件进行连接.如果失败,我们可能会认为文件的所有者进程已经死亡.这需要accept()在所有者进程中的套接字上循环一个线程.不幸的是,系统不再是原子的.