gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:41:58 36 4
gpt4 key购买 nike

我计划使用域套接字作为锁,以确保只有一个事件实例(Linux 内核 >=2.6)。

因此,我将域套接字绑定(bind)到事件进程,并创建一个带有 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)

它通常工作正常,但现在我设法硬杀一个进程,以便它在退出时没有关闭其套接字,并且套接字在进程的生命周期之外保持打开状态:

> lsof
condorJob 124485 root 4u unix 0xffff88186c3341c0 0t0 175181414 @TestFooName
condorJob 124485 root 5w REG 8,6 0 13893673 /var/tmp/UID-0_PROCESS-TestFooName.pid (deleted)

由于我有一个 PID 文件作为交叉检查,我想关闭套接字(在进程树中进行健全性检查后,这是唯一的)。但是,我无法从新实例绑定(bind)到套接字,因为它仍然绑定(bind)为〜僵尸套接字

有没有一种Python方法可以关闭现有的unix域套接字(如果需要,以pid 0运行)?

最佳答案

这是我的一个错误。我已手动将进程发送到另一个选项卡中休眠,尽管 lsof 显示了 PID,但我没有意识到这一点。杀死进程后,内核按预期关闭了套接字。所以一切都按预期进行。

关于python:如何从新进程关闭孤立的域套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36713113/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com