美文网首页
fork()函数详解

fork()函数详解

作者: Pig_wu饲养员 | 来源:发表于2018-02-07 11:25 被阅读0次

进程和线程

进程是资源分配的基本单位,例如内存资源等,进程之间资源是相互隔离的;线程是操作系统调度的最小单位。一个进程可以包括多个线程。

fork函数

Unix/linux系统提供了一个fork函数,这个还是比较特殊,执行一次,返回两次;此时通过系统调用创建一个与原来进程(父进程)基本相同的进程(子进程),然后分别在父子进程中返回。子进程返回值永远是0,父进程的返回值是子进程id。这样做的原因是一个父进程可以fork出若干个子进程,所以,父进程需要记住所有的子进程的id,而子进程只需要通过getppid()这个函数,就可以拿到父进程id。

fork函数返回值

fork函数可能有三种返回值:
1)父进程中返回值是子进程的ID
2)子进程返回值为0
3)如果出现错误,fork函数返回负值
fork函数出现错误的情况:
1)当前进程数已达到系统上限,这时errno的值被设置为EAGAIN。
2)系统内存不足,这时errno的值被设置为ENOMEM

python中的fork函数

python的os模块封装了很多系统调用函数,其中就有fork函数,这样就可在python程序中轻松的创建子线程

# -*- coding:utf-8 -*-

import os

print "test Process (%s) starting..." % os.getpid()

pid = os.fork()

if pid == 0:
   print "I am child process(%s) and my parent is (%s)" % (os.getpid(), os.getppid())

else:
   print "I (%s) just created a child process(%s)" % (os.getpid(), pid)

输出结果为:


image.png

从图中的结果可以验证上述结论。

fork函数的应用

windows系统中是没有fork调用的,所以上述代码无法再windows中运行。
有了fork调用,一个进程在接到新任务时就可以复制出一个子进程来处理新任务,常见的Apache服务器就是由父进程监听端口,每当有新的http请求时,就fork出子进程来处理新的http请求

相关文章

  • fork() 与exec()的区分

    一、fork函数详解 函数原型: #include pid_t fork(void); fork函数是对整个进程进...

  • linux中fork()函数详解 (阅读笔记)

    linux中fork()函数详解(转载) 一、fork入门知识 在Linux中fork函数是非常重要的函数,它的作...

  • fork()函数详解

    进程和线程 进程是资源分配的基本单位,例如内存资源等,进程之间资源是相互隔离的;线程是操作系统调度的最小单位。一个...

  • 越狱检测fork函数详解

    一个进程,包括代码、数据和分配给进程的资源。 fork()函数通过系统调用,创建一个与原来进程几乎完全相同的进程,...

  • 3.6、fork函数详解、范例演示

    1、fork()函数简单认识用来创建进程,进程的概念:一个可执行程序执行起来就是一个进程。多个进程可以共享同一个可...

  • 系统编程:fork()、exec()前用fflush()刷新缓冲

    一、fork函数的使用异常 有一fork函数使用示例如下: 根据fork函数功能,我们可以在控制台上输出以下内容:...

  • Redis AOF重写的实现原理

    1. 操作系统基础 1.1. fork 当我们在一个程序的函数中调用 fork 函数时,fork 函数会创建一个子...

  • fork 详解

    郑重提示 向社区反馈代码提升自己的能力是好事;但是往github提交代码一定要谨慎;各个公司的安全部门为了公司的财...

  • fork()函数

    fork函数是计算机程序设计中的分叉函数。返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程标记...

  • fork函数

    含义fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这...

网友评论

      本文标题:fork()函数详解

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