python创建守护进程的疑问
我自己写了一个简易的下载和文件执行的客户端,如下
"""
省略若干代码
"""
#执行下载函数
def do_script():
"""Start working"""
script_list = None
for mark in range(3):
try:
# get scripts
if not script_list:
script_list = get_scripts()
if script_list == None:
continue
for script in script_list:
command_exec = 'chmod a+x %s' % script
PyShell.new_progress(command_exec)
PyShell.new_progress('./%s' % script)
# return
except Exception as e:
logging.info(traceback.format_exc())
if mark == 2:
send_error_log(e)
#创建守护进程
def createDaemon():
try:
if os.fork() > 0: os._exit(0)
except OSError, error:
print 'fork #1 failed: %d (%s)' % (error.errno, error.strerror)
os._exit(1)
os.chdir('/')
os.setsid()
os.umask(0)
try:
pid = os.fork()
if pid > 0:
#print 'Daemon PID %d' % pid
os._exit(0)
except OSError, error:
#print 'fork #2 failed: %d (%s)' % (error.errno, error.strerror)
os._exit(1)
sys.stdout.flush()
sys.stderr.flush()
si = file("/dev/null", 'r')
so = file("/dev/null", 'a+')
se = file("/dev/null", 'a+', 0)
os.dup2(si.fileno(), sys.stdin.fileno())
os.dup2(so.fileno(), sys.stdout.fileno())
os.dup2(se.fileno(), sys.stderr.fileno())
#写pid文件
if os.path.exists(pidfile):
os.remove(pidfile)
pid = str(os.getpid())
file(pidfile, 'w+').write("%s\n" % pid)
#为什么执行函数不能写这里,写这里会导致代码无法执行到这里?
if __name__ == '__main__':
if platform.system() == "Linux":
createDaemon()
#必须写到main里,才可以执行?
while 1:
do_script()
time.sleep(20)
else:
os._exit(0)
其中,为什么执行函数不能写在守护进程函数里,而必须写到main函数里呢?
难道是因为守护进程函数里无法再创建进程原因?
相关阅读:
php echo return 返回json数据的问题
报错信息: "_AVAudioSessionCategoryAmbient", referenced from:
css中如何做到容器按比例缩放
The application did not terminate cleanly but no crash occured.
PHP有没有办法往USB口写数据
我在Ngnix日志里面查到这样的连接,请问这种是什么乱码
nodejs 移动目录遇到EPERM该怎么解决
canvas截图模糊的问题
PHP下面的Composer组件Macaw如何正确的配置
android listView 的适配器 adpater 的getView不执行?
css sprite 只能当作背景图片吗?
安卓 横屏状态下,软键盘弹出 遮盖部分EditText!!!!!!!急
新手学网站开发,做了下 AB 测试,有几个问题请教下大家!
rest 接口如何保证 客户端请求的用户唯一性
bootstrap选中下拉菜单的子菜单时怎么样改变子菜单的背景颜色呢?
phpstorm鼠标显示问题
python pip install xlwings报错
php json_decode ,不能 转换成中文
把jquery方法改为js写,滚动条居然滚出去了,当时就懵逼了.....
mysql 数据库枚举类型enum,方便添加新的枚举项吗?