Linux有这个特点的
应该是子进程继承了父进程的文件描述符,所以虽然父进程关了,进程里面对应的文件描述符没关闭
系统认为对应的文件没有关闭(linux里面所有的东西都被看成文件,打开的socket说成文件没问题吧)
系统就认为端口还被占用
问题就出在子进程继承了父进程的文件描述符上
python启动子进程的方法主要有3种
os.system()这个函数和c中的os.system()类似,无法对子进程进行控制
os.popen()可以获取子进程的输出
subprocss.Popen()这个函数对子进程的控制选项比较多
[mw_shl_code=bash,true]subprocess.Popen(args, bufsize=0,
executable=None, stdin=None, stdout=None,
stderr=None, preexec_fn=None,
close_fds=False, shell=False,
cwd=None, env=None, universal_newlines=False,
startupinfo=None, creationflags=0)[/mw_shl_code]
close_fds=False,把值改为True,会关闭从父进程继承的文件描述符
需要注意的是args参数是个list,命令的参数是多个时不能直接给个字符串,需要转换成['args1','args2'......]这样的格式
楼主可以尝试上面方法
|