ドメインソケットをロックとして使用して1つのアクティブインスタンス(Linuxカーネル> = 2.6)を保証する予定です。python:新しいプロセスから孤立したドメインソケットを閉じる方法
したがって、私はアクティブなプロセスにドメインソケットをバインドしており、fsのより人間にやさしいチェックオプションのためにPIDでロックファイルを作成しています。
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ファイルを持っているので、私はソケットツリーを唯一のものとしてプロセスツリーのサニティチェックの後に閉じたいと思っています。しかし、それはまだ〜ゾンビソケットとしてバインドされているので、私は新しいインスタンスからソケットにバインドできません。
既存のUnixドメインソケットを閉じるためのPythonの方法はありますか(必要に応じてpid 0として実行しています)?