python:如何从新进程关闭孤立域套接字

2024-03-28 14:08:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我计划使用域套接字作为锁,以确保只有一个活动实例(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的形式运行)?在


Tags: 文件实例self进程oslinuxdefsocket
1条回答
网友
1楼 · 发布于 2024-03-28 14:08:35

对我来说这是个错误。我已经手动将进程发送到另一个选项卡中休眠,尽管lsof显示了PID,我还是没有意识到这一点。在终止进程之后,内核按预期关闭了套接字。所以一切都如期进行。在

相关问题 更多 >