python 解决os.execv 导致的open too many files问题

来源:转载

原因

调用execv后会用一个新的process image 替换掉老的process image。文件描述符却不会被替换,也就是之前创建的文件描述符并不会被关闭(代码中负责关闭文件描述符的函数被替换了,来不及执行).


解决

每次execv前先给所有的fd添加上close-on-exec.


import psutil
p = psutil.Process()
# 0,1,2(stdin, stdout, stderr)不可关闭
for fd in range(3, p.num_fds()):
try:
flags = fcntl.fcntl(fd, fcntl.F_GETFD)
except IOError:
continue
fcntl.fcntl(fd, fcntl.F_SETFD, flags|fcntl.FD_CLOEXEC)

分享给朋友:
您可能感兴趣的文章:
随机阅读: