Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1125464
  • 博文数量: 170
  • 博客积分: 1603
  • 博客等级: 上尉
  • 技术积分: 1897
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-09 15:54
文章分类

全部博文(170)

文章存档

2016年(27)

2015年(21)

2014年(27)

2013年(21)

2012年(7)

2011年(67)

我的朋友

分类: 系统运维

2014-06-18 10:53:44

以前一直用ssh远程执行点小命令所以没在意这个
最近要用ssh远程执行复杂的脚本,发现这个问题挺蛋痛的。
直接上代码说明

点击(此处)折叠或打开

  1. import time
  2. import os,sys
  3. import subprocess

  4. #print 'ok'
  5. #sys.stdout.flush()

  6. pid = os.fork()
  7. if pid != 0:
  8.     os._exit(0)
  9. else:
  10.    pid = os.fork()
  11.    if pid != 0:
  12.        os._exit(0)

  13. #os.system('sleep 10')
  14. #subprocess.Popen('sleep 10',shell=True)
  15. time.sleep(20)

远程执行这个命令,发现即使进程已经挂到1上 ,ssh本地依旧不会退出,用ubprocess.Popen('sleep 10',shell=True)也不行
网上一堆说用nohup的,也是一样,因为进程挂在1上本地不退出,用nohup还是挂1上一样解决不了

试了下发现只要>/dev/null就ok了,原因很可能是ssh远程命令通道拦截了stdout,只要这个进程(包括其子进程)还存在,ssh就一直等待stdout的输出
所以只要把输出定向到/dev/null就可以了,但是这就没法获得命令执行的回显了

半年后看自己写的东西 现在明白什么问题了哦

os.close()掉0,1,2或者重定向走就可以了......

阅读(4353) | 评论(0) | 转发(0) |
0

上一篇:tomcat https

下一篇:Mysql常用时间函数

给主人留下些什么吧!~~