python3启动子进程之 os.fork()

先了解python3 os.fork()  使用说明

在生物学家开始克隆研究之前,计算机科学家就拥有成功的克隆历史。他们克隆了进程,尽管他们没有将其称为克隆而是fork,fork是Unix和Linux最重要的方面之一。当进程要fork(克隆)时,它会创建自己的副本,更一般而言,在多线程(进程)环境中的fock意味着执行的线程(进程)被复制,从而从父线程(进程)创建子线程。它们是相同的,但可以区分开。fork操作为子线程(进程)创建一个单独的地址空间。子进程具有父进程所有内存的精确副本。父子进程的执行彼此独立。

这个函数很特殊,调用一次,返回两次,因为操作系统是将当前的进程(父进程)复制了一份(子进程),然后分别在父进程和子进程内返回。子进程永远返回0,而父进程返回子进程的 PID。我们可以通过判断返回值是不是 0 来判断当前是在父进程还是子进程中执行

  • os.fork() 用于在程序中创建子进程,这个方法在子进程中返回0,在父进程中返回子进程的pid。
  • os.fork()  子进程只执行os.fork() 之后的代码块
import os
print('before')
pid=os.fork()
print('after')
print('我的pid',pid)
print('bbb')
before
after
我的pid 58000
bbb
after
我的pid 0
bbb

 说明:程序执行到fork的时候 操作系统对当前的进程(父进程)复制了一份(子进程)地址空间,然后两个同时执行fork()以后的代码 ,同时将的fork()不同值返回给父子进程各自pid变量,然后在执行之后的代码

也就是同时执行

pid=
print('after')
print('我的pid',pid)
print('bbb')

 所以会打印各自的pid 和 两个 after,bbb

import os
import time
print('before')
os.fork()
print('pid',os.getpid())
os.fork()
print('ppid',os.getppid())

上面会            主进程---fork--->子进程(独立)

|                           |

fork                      fork

\|/                        \|/

子进程                  子进程

通过pid  判断 子进程和父进程 并执行行相应代码

依据: os.fork() 用于在程序中创建子进程,这个方法在子进程中返回0,在父进程中返回子进程的pid

import os

def  son():
print('son')
print(max(2,3)) def father():
print('father')
print(min(2, 3)) pid=os.fork() if pid==0:
son()
else:
father()
father
2
son
3

  

到目前为止,我们已经在示例中调用了在同一脚本文件中定义的函数。

fork通常用于启动独立程序。为此,我们需要exec *()函数。

他们通过用该程序替换当前进程来执行新程序。他们不会返回调用它们的程序。他们甚至收到与调用程序相同的进程ID。

exec函数 参考https://www.python-course.eu/forking.php

最新文章

  1. 消息中间件与JMS标准
  2. 深入理解Nginx之调试优化技巧
  3. 更好更快更高效解析JSON说明
  4. iOS应用架构现状分析
  5. 基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏
  6. openerp学习笔记 视图更新时删除已存在的菜单或其他对象
  7. HDU1312——Red and Black(DFS)
  8. 80806汇编(5)——[BX]和Loop指令
  9. PAT1008:Elevator
  10. vue实例化
  11. Djangoorm的多表建立与queryset对象的合并
  12. HUAWEI USG6000系列 & NGFW Module V100R001 典型配置案例
  13. 5 jmeter性能测试小小的实战
  14. angularJS1笔记-(2)-$watch方法监听变量的变化
  15. pytest文档24-fixture的作用范围(scope)
  16. 对Routers的理解
  17. Chapter 14. Blocks and Statements
  18. Hadoop Serialization -- hadoop序列化详解 (2)
  19. iOS 动画笔记 (二)
  20. 怎么解决java.lang.NoClassDefFoundError错误

热门文章

  1. annaconda的安装及使用
  2. JDBC链接数据库。
  3. JavaScript零宽字符
  4. mysql中的on
  5. angular自启动过程
  6. ORM单表查询,跨表查询,分组查询
  7. hdu1732 Pushbox bfs 细节比较多,需要注意
  8. CERN Root与CLING
  9. python set() leetcode 签到820. 单词的压缩编码
  10. Github标星3K+,热榜第三,一网打尽数据科学速查表