美文网首页
进程之os模块

进程之os模块

作者: 遇明不散 | 来源:发表于2019-04-19 10:02 被阅读0次

    os模块

    • os 模块提供大量和系统相关的功能函数接口
    • os 模块的使用时系统相关的,在不同的系统中,可能使用方法不同
    os.fork()
    • 平台:只能在linux和unix下使用
    • 功能:创建一个新的进程
    • 参数:无
    • 返回值:
      • < 0 表示进程创建失败
      • == 0 在子进程中fork的返回值为0
      • > 0 在父进程中fork的返回值大于0,返回新的进程的PID号
    import os
    
    # 创建新进程
    pid = os.fork()
    
    if pid < 0:
        print('Create process failed.')
    elif pid == 0:
        print('This is the new process.')
    else:
        print('This is the parent process.')
    
    print('The porcess end.')
    
    注意点
    • 子进程会复制父进程全部代码段,包括fork之前产生的内存空间
    • 子进程从fork的下一句开始执行,与父进程互不干扰,理论上不一定谁先执行
    • 父子进程的执行顺序是不一定的,父子进程公用一个终端显示
    • 父子进程通常会根据fork返回值得差异选择执行不同的代码。所以if结构几乎是fork的固定搭配
    • 父子进程空间独立,操作的都是本空间的内容,互不影响
    • 子进程也有自己的特性,比如PID号,PCB,命令集等
    • 子进程的退出不会影响父进程。
    • 子进程不会执行fork语句,会从fork的下一句开始执行,当父进程执行到fork语句时,系统会记录当前的位置,即文件偏移量,子进程从当前的位置开始执行,而fork的下一句并非if语句,而是把fork的返回值赋值给pid的赋值语句。
    import os
    
    # 创建新进程
    pid = os.fork()
    a = 10
    
    if pid < 0:
        print('Create process failed.')
    elif pid == 0:
        print('pid =',pid)  # 0
        print('This is the new process.')
        print(a)   # 10
        a = 1000  # 子进程中修改a的值,不会影响父进程a的值
    else:
        # 父进程中的PID为子进程的PID号。
        print('Parent pid =',pid)   
        print('This is the parent process.')
    
    print('The porcess end.')
    print(a)  # 父进程 a = 10,子进程 a = 1000
    

    进程相关函数

    • os.getpid() 获取当前进程的PID号
    • os.getppid() 获取当前进程父进程的PID号
    • os._exit(status) 结束一个进程
      一个数字表示进程的退出状态,通常0表示正常退出进程,其他数字表示非正常退出
    • sys.exit([status]) 结束一个进程,如果处理了抛出的异常则不结束进程
      • 一个数字表示进程的退出状态,默认为0,还可以是一个字符串,则在进程退出时会打印这个字符串
      • 可以通过捕获 SystemExit 异常阻止退出

    相关文章

      网友评论

          本文标题:进程之os模块

          本文链接:https://www.haomeiwen.com/subject/ornfgqtx.html