fork()的理解

本文基于python实现

UNIX/LINUX/MAC中提供了fork()系统调用,但是Windows下却没有。

fork()函数会创建一个新的进程,称为子进程。当前进程为父进程。子进程有父进程(当前进程复制而来)。fork的子进程会复制当前进程的全部代码空间,资源,和数据结构。所以,fork的子进程从哪开始运行? 从创建子进程这一行开始运行。同时,fork会返回两次,一次父进程返回,为子进程的ID,一次子进程返回,就返0。

下面举个例子。

import os

print('Process (%s) start ...' % os.getpid())

pid = os.fork()

if pid == 0:
    print('I am child process (%s)' % os.getpid())
    print('my parent process is (%s)' % os.getppid())
else:
    print('I (%s) just created a child process (%s).' % (os.getpid(), pid))

结果如下:
在这里插入图片描述
Q&A:

  1. getpid()返回当前进程id getppid()返回父进程id
  2. pid的值到底是多少?
    fork可能的值有3种,一种是子进程的id=0,一种是父进程的id,还有一种是fork出错,返回负值
  3. 什么情况下fork出错?
    内存不足 或 当前进程数达到上限
  4. 父进程子进程执行顺序?
    没有固定的执行顺序,要看操作系统的进程调度方案。
    5.子进程从哪开始执行?
    因为子进程复制了父进程几乎全部内容,所以fork前的代码不再执行,从fork后开始执行。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值