最近要用ssh远程执行复杂的脚本,发现这个问题挺蛋痛的。
直接上代码说明
点击(此处)折叠或打开
-
import time
-
import os,sys
-
import subprocess
-
-
#print 'ok'
-
#sys.stdout.flush()
-
-
pid = os.fork()
-
if pid != 0:
-
os._exit(0)
-
else:
-
pid = os.fork()
-
if pid != 0:
-
os._exit(0)
-
-
#os.system('sleep 10')
-
#subprocess.Popen('sleep 10',shell=True)
- 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或者重定向走就可以了......