读书人

建自己的程序放到后台执行?解决思路

发布时间: 2013-01-25 15:55:29 作者: rapoo

建自己的程序放到后台执行?
找到一段实现代码,不过看的不太明白,请大牛解释一下下面代码是怎样建进程放入后台执行的?

def daemonize(self, stdin = '/dev/null', stdout = '/dev/null', stderr = '/dev/null'):
try:
pid = os.fork()
if pid > 0:
sys.exit(0)
except OSError, e:
sys.exit(4)

os.chdir('/')
os.umask(0)
os.setsid()

try:
pid = os.fork()
if pid > 0:
sys.exit(0)
except OSError, e:
sys.exit(4)

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())

[解决办法]
试试python-daemon 1.5.5
http://pypi.python.org/pypi/python-daemon/
[解决办法]
1.py在国内人气不高,原因心照不提,因此这边也不会太多人在线
国外就不同了,stackoverflow.com上面问py问题和解答的多呢
2.fork是*nix体系的,你也该明白国内windows是一统天下的,剩下的……
3.上面两点是相乘关系,结果就如此

不要抱怨CSDN或者别人怎样……因为找不到答案永远不是别人的问题,这个是应该从小孩就该明白的道理

我也不懂*nix,尝试从程序的理解给个自己的答案,不对你就继续寻找正确答案

Fork a child process. Return 0 in the child and the child’s process id in the parent.
就是新开了子进程,具体你再参考*nix的man,我说不上什么
而且程序似乎把输出都刷掉了——for f in sys.stdout, sys.stderr: f.flush()
这样的效果就相当于后台进行
[解决办法]
这个我就说不上了,区别是中间实施了setid()……

读书人网 >perl python

热点推荐