• 解决子进程占有父进程端口的问题


    在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'......]这样的格式

  • 相关阅读:
    AC 自动机
    [HihoCoder-1424] Asa's Chess Problem
    C++ Tricks
    2017"百度之星"程序设计大赛
    后缀自动机
    ASP教程:gb2312和utf-8乱码问题解决
    cryto-js 常用加密库 md5加密
    nrm是什么?以及nrm的安装与命令
    MongoDB 安装
    koa2 安装与启动
  • 原文地址:https://www.cnblogs.com/sj9524437/p/2856680.html
Copyright © 2020-2023  润新知