各位:
如果远程登录到linux服务器上并且启动confbot,那么在退出远程登录的时候,可能你不希望congbot也随之关闭(而是希望通过)die命令手动关闭),
我加了一些代码以达到这个目的.
注意这些代码只能在linux平台上试用.
而且可能只能使用python 2.4以上的版本.
def handler(signum, frame):
pid = waitpid(status,WNOHANG)
while pid>0:
pid = waitpid(status,WNOHANG)
def daemonize():
import signal
import fcntl
import termios
import array
signal.signal(signal.SIGTTOU,signal.SIG_IGN)
signal.signal(signal.SIGTTIN,signal.SIG_IGN)
signal.signal(signal.SIGTSTP,signal.SIG_IGN)
childpid = os.fork()
if childpid<0:
sys.exit(1)
elif childpid>0:
sys.exit(0)
os.setpgrp()
fd = os.open("/dev/tty",os.O_RDWR)
if fd>0:
buf=array.array('h',[0])
fcntl.ioctl(fd,termios.TIOCNOTTY,buf,0)
os.close(fd)
os.chdir("/")
os.umask(0)
signal.signal(signal.SIGCLD,handler)
daemonize()
//下面是老代码
readconfig()
不过在linux下需要这样吗?不是可以通过后台运行方式来运行吗?比如:
confbot.py &
这样不行吗?
--
I like python!
My Blog: http://www.donews.net/limodou
NewEdit Maillist: http://groups.google.com/group/NewEdit
嗯,我记得有一个什么nohup之类的用法吧。
大致上:
对于一个没有做特殊操作(屏蔽掉几个信号,关掉一些文件描述符)的linux程序,
在启动它的shell退出的时候,会收到退出信号,默认动作回是程序退出.
有对此比较熟悉的同志可以帮忙补充更专业的解释.
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/278731
看看这个可能会有些帮助
据说要fork 两次才不会留下zombie进程
我记得Advanced Unix Programming Environment 里面讲过, 细节忘了
--
simple is good
http://brucewang.net