python子进程关闭fd_Python:进程守护进程时关闭文件描述符

我的应用程序中有以下代码:def daemonize_process(stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'):

'''

Fork the current process as a daemon (background process), redirecting

standard file descriptors

@param string stdin standard input file name

@param string stdout standard output file name

@param string stderr standard error file name

'''

# To transform a process in a daemon, it is necessary to fork, decouple from

# parent environment, fork again and close all opened file descriptors.

# do first fork

try:

pid = os.fork()

if pid > 0:

# exit from first parent process

# using os._exit() instead of sys.exit() in a child process after

# a fork is recommended by Python API docs

os._exit(0)

except OSError as e:

sys.stderr.write("fork #1 failed: (%d) %s\n" % (e.errno, e.strerror))

sys.exit(1)

# decouple from parent environment

os.chdir("/")

os.umask(0)

os.setsid()

# do second fork

try:

pid = os.fork()

if pid > 0:

# exit from second parent process

# using os._exit() instead of sys.exit() in a child process after

# a fork is recommended by Python API docs

os._exit(0)

except OSError, e:

sys.stderr.write("fork #2 failed: (%d) %s\n" % (e.errno, e.strerror))

sys.exit(1)

# close all file descriptors

import resource

maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1]

if (maxfd == resource.RLIM_INFINITY):

maxfd = 1024

for fd in range(0, maxfd):

try:

os.close(fd)

except OSError:

sys.stderr.write("error closing file: (%d) %s\n" % (e.errno, e.strerror))

pass

# process is now daemonized, redirect standard file descriptors.

for f in sys.stdout, sys.stderr:

f.flush( )

si = file(stdin, 'r')

so = file(stdout, 'a+')

se = file(stderr, 'a+', 0)

os.dup2(si.fileno( ), sys.stdin.fileno( ))

os.dup2(so.fileno( ), sys.stdout.fileno( ))

os.dup2(se.fileno( ), sys.stderr.fileno( ))

在我在web上看到的daemonization代码中,子进程中没有关闭文件描述符。我为什么要这么做?在我看来,我可能希望继续使用fork-detach-fork进程之前已经在工作的文件。在

提前谢谢。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值