Python fork()

fork()

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

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

fork()语法:

功能:为当前进程创建一个子进程

参数:无

返回值:0 和 子进程PID(在父进程中返回)

    < 0 子进程创建失败

    = 0 在子进程中的返回值

    > 0 在父进程中的返回值

特点:

(1)子进程会继承父进程几乎全部代码段(包括fork()前所定义的所有内容)

(2)子进程拥有自己独立的信息标识,如PID

(3)父、子进程独立存在,在各自存储空间上运行,互不影响

(4)创建父子进程执行不同的内容是多任务中固定方法

 例子:

import os
from time import sleep

pid = os.fork() 
# os.fork()为当前进程创建出一个子进程,返回两个值,一个是0,另外一个是子进程的pid,0在子进程中返回,子进程的pid在父进程返回。
x1, x2 = 3, 7
if pid < 0 :
    print("create process failed")
elif pid == 0:
    print("this is child process, the pid is %s" % os.getpid())
    print('x1 + x2 =', x1+x2)
else :
    sleep(1)
    print("this is parent process, the pid is %s" % os.getpid())
    print('x1 * x2 =', x1*x2)

print("******the end*******")

执行结果:

[root@syztoo ~]# python3 forks.py 
this is child process, the pid is 7815
x1 + x2 = 10
******the end*******
this is parent process, the pid is 7814
x1 * x2 = 21
******the end*******

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值