zoukankan      html  css  js  c++  java
  • 解决子进程占有父进程端口的问题

    在Centos服务器中启动一个在web服务,处理消息

    其中有个消息需要启动系统的服务如mysqld等

    发现启动服务后,关掉web服务,再打开web服务就会提示对应端口已经被占有

    应该是子进程继承了父进程的文件描述符,所以虽然web服务关了,mysqld等服务进程里面对应的文件描述符没关闭

    系统认为对应的文件没有关闭(linux里面所有的东西都被看成文件,打开的socket说成文件没问题吧)

    系统就认为端口还被占用

    问题就出在子进程继承了父进程的文件描述符上

    查了下资料,python启动子进程的方法主要有3种

    os.system()这个函数和c中的os.system()类似,无法对子进程进行控制

    os.popen()可以获取子进程的输出

    subprocss.Popen()这个函数对子进程的控制选项比较多

    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)

    close_fds=False,把值改为True,会关闭从父进程继承的文件描述符

    需要注意的是args参数是个list,命令的参数是多个时不能直接给个字符串,需要转换成['args1','args2'......]这样的格式

  • 相关阅读:
    美多商城项目(一)
    Linux安装Qt
    mysql之初体验
    Linux系统编程目录
    Linux 多线程
    进程间通信
    Linux进程
    Linux文件IO(简易)
    Linux常用基本操作
    重绘
  • 原文地址:https://www.cnblogs.com/sj9524437/p/2856680.html
Copyright © 2011-2022 走看看