zoukankan      html  css  js  c++  java
  • python系统编程(一)

    进程的创建-fork

    1. 进程 VS 程序

    编写完毕的代码,在没有运行的时候,称之为程序

    正在运行着的代码,就成为进程

    进程,除了包含代码以外,还有需要运行的环境等,所以和程序是有区别的

    2. fork( )

    Python的os模块封装了常见的系统调用,其中就包括fork,可以在Python程序中轻松创建子进程:

    import os
    
        # 注意,fork函数,只在Unix/Linux/Mac上运行,windows不可以
        pid = os.fork()
    
        if pid == 0:
            print('哈哈1')
        else:
            print('哈哈2')

    说明:

    • 程序执行到os.fork()时,操作系统会创建一个新的进程(子进程),然后复制父进程的所有信息到子进程中
    • 然后父进程和子进程都会从fork()函数中得到一个返回值,在子进程中这个值一定是0,而父进程中是子进程的 id号

    在Unix/Linux操作系统中,提供了一个fork()系统函数,它非常特殊。

    普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后,分别在父进程和子进程内返回。

    子进程永远返回0,而父进程返回子进程的ID。

    这样做的理由是,一个父进程可以fork出很多子进程,所以,父进程要记下每个子进程的ID,而子进程只需要调用getppid()就可以拿到父进程的ID。

    3. getpid()、getppid()

    import os
    
    rpid = os.fork()
    if rpid<0:
        print("fork调用失败。")
    elif rpid == 0:
        print("我是子进程(%s),我的父进程是(%s)"%(os.getpid(),os.getppid()))
        x+=1
    else:
        print("我是父进程(%s),我的子进程是(%s)"%(os.getpid(),rpid))
    
    print("父子进程都可以执行这里的代码")

    运行结果:

    我是父进程(19360),我的子进程是(19361)
    父子进程都可以执行这里的代码
    我是子进程(19361),我的父进程是(19360)
    父子进程都可以执行这里的代码

    多进程修改全局变量

    #coding=utf-8
    import os
    import time
    
    num = 0
    
    # 注意,fork函数,只在Unix/Linux/Mac上运行,windows不可以
    pid = os.fork()
    
    if pid == 0:
        num+=1
        print('哈哈1---num=%d'%num)
    else:
        time.sleep(1)
        num+=1
        print('哈哈2---num=%d'%num)

  • 相关阅读:
    白话数字签名(3)——Web程序中的数字签名(转)
    Android下基于XML的Graphics (转)
    js获取html页面传参
    nodejs教程:安装express及配置app.js文件
    Android中的Selector(转)
    org.apache.tools.zip.*和org.apache.commons.httpclient.*实现远程文件打包下载,支持中文文件名(转)
    EditText中进行文字截获和事件监听——(转载)
    常用js验证和常用方法汇总
    解决AVD的“SDL_app:emulator.exe应用程序错误”
    白话数字签名(2)——软件&设备(转)
  • 原文地址:https://www.cnblogs.com/leecoffee/p/9036610.html
Copyright © 2011-2022 走看看