我计划使用域套接字作为锁,以确保只有一个活动实例(Linux kernel>;=2.6)。在
因此,我将一个域套接字绑定到活动进程,并创建一个带有PID的锁文件,以便在fs中进行更人性化的检查选项。在
import socket
class processLock(object):
def __init__(self, processName):
self.processName = processName
self.PIDfile = os.path.join(self.getTMPDIR(),"UID-%s_PROCESS-%s.pid" % (os.getuid(), processName) )
...
self.socket.bind('\0' + self.processName)
...
atexit.register(self.cleanup)
...
def cleanup(self):
self.socket.shutdown(socket.SHUT_RDWR)
self.socket.close()
self.socketOK = False
os.remove(self.PIDfile)
它通常是正常工作的,但现在我努力杀死一个进程,这样它就不会在退出时关闭它的套接字,并且在进程的生存期之后,套接字保持打开状态:
^{pr2}$因为我有一个PID文件作为交叉检查,所以我想关闭这个套接字(在进程树中进行健全性检查之后,这是唯一一个)。但是,我无法从新实例绑定到套接字,因为它仍然被绑定为~zombie socket。在
有没有一种python方法可以关闭现有的unix域套接字(如有必要,以pid 0的形式运行)?在
对我来说这是个错误。我已经手动将进程发送到另一个选项卡中休眠,尽管lsof显示了PID,我还是没有意识到这一点。在终止进程之后,内核按预期关闭了套接字。所以一切都如期进行。在
相关问题 更多 >
编程相关推荐