`
mmdev
  • 浏览: 12891070 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

【操作系统】linux创建子进程--fork()方法

 
阅读更多

(1)fork()的定义

fork()函数是Unix中派生新进程的唯一方法,声明如下:

#include <unistd.h>

pid_t fork(void);

我们需要理解的是,调用一次fork()方法,该方法会返回两次。一次是在调用进程(也就是派生出的子进程的父进程)中返回一次,返回值是新派生的进程的进程ID。一次是在子进程中返回,返回值是0,代表当前进程为子进程。如果返回值为-1的话,则代表在派生新进程的过程中出错。

那么在程序中,我们就可以根据此返回值来判断当前进程是父进程还是子进程,来实现一些具体的操作。例如:

int main()
{
    pid_t pid;

    if((pid = fork()) = 0)
    {
        // TODO: 在子进程中实现具体操作
        // ...
        exit(0); // 结束子进程
    }

    // TODO: 在调用进程(父进程)实现具体操作
}
(2)fork()的实质过程

父进程中在调用fork()派生新进程,实际上相当于创建了进程的一个拷贝;即在fork()之前的进程拥有的资源会被复制到新的进程中去。网络服务器在处理并发请求时,也可以采取这种派生新进程的方式: 父进程调用accept()后调用fork()来处理每一个连接。那么,所接受的已连接的套接口随后就在父子进程中共享。通常来说,子进程会在这连接套接口中读和写操作,父进程则关闭这个已连的套接口(可以参考:http://blog.csdn.net/moxiaomomo/article/details/6791763)

(3)fork()的用法

fork()有两个典型用法:(1)一个进程进行自身的复制,这样每个副本可以独立的完成具体的操作,在多核处理器中可以并行处理数据。这也是网络服务器的其中一个典型用途,多进程处理多连接请求。 (2)一个进程想执行另一个程序。比如一个软件包含了两个程序,主程序想调起另一个程序的话,它就可以先调用fork来创建一个自身的拷贝,然后通过exec函数来替换成将要运行的新程序。

分享到:
评论

相关推荐

    操作系统进程创建与并发实验报告及源码

     利用fork()函数创建子进程。  考察fork()函数创建的子进程与父进程之间的同名变量是否为临界资源。  利用fork()函数编写一个程序,要求父进程创建两个子进程,父进程、子进程并发执行,输出并发执行的消息,...

    操作系统实验 体验linux基本操作 子进程的创建

    一、实验目的: ... Stones(译者:陈健,宋健建),人民邮电出版社,2010)第11章“进程和信号”的内容,熟悉进程创建、进程协同工作等相关函数如fork()、system()、exec()、waitpid()、exit()等的使用方法。

    电子科大操作系统实验课Linux通过管道实现进程间通信

    在Linux系统中使用系统调用fork()创建两个子进程,使用系统调用pipe()建立一个管道,两个子进程分别向管道各写一句话: Child process 1 is sending a message! Child process 2 is sending a message! 而父进程则...

    Linux 创建子进程执行任务的实现方法

    Linux 操作系统紧紧依赖进程创建来满足用户的需求。例如,只要用户输入一条命令,shell 进程就创建一个新进程,新进程运行 shell 的另一个拷贝并执行用户输入的命令。Linux 系统中通过 fork/vfork 系统调用来创建新...

    Linux进程操作fork()等函数的应用

    Linux系统编程的进程操作,C语言,明晰子进程的创建结构

    操作系统实验,进程控制

    操作系统实验,压缩包中包括Linux和windows进程控制源代码及实验报告。 进程控制实验题目: 设计并实现Unix的“time”命令。“mytime”命令通过命令行参数接受要运行的程序,创建一个独立的进程来运行该程序,并...

    fork-wrapper:生成一个程序,然后等待所有子进程终止

    叉式包装机fork-wrapper产生一个程序并在退出之前等待所有子进程退出。 fork-wrapper将以最后一个要退出的子进程的退出状态终止。问题许多守护进程(例如 Unicorn)通过创建一个新的主进程来实现热重载。 一旦新的主...

    操作系统上机实验报告-进程的管道通信

    在Linux系统下实现进程从创建到终止的全过程,从中体会进程的创建过程、父进程和子进程之间的关系、进程状态的变化、进程之间的互斥、同步机制、进程调度的原理和以管道为代表的进程间的通信方式的实现。 2. 内容及...

    操作系统课程设计试验

    对于父进程fork返回子进程的ID,而对于fork子进程返回0.我们就是根据这个返回值来区分父子进程的。Linux是一个多用户操作系统,在同一时间会有许多的用户在争夺系统的资源。有时进程为了早一点完成任务就创建子进程来...

    Linux环境下进程管理.doc

    操作系统实验报告,Linux环境下进程管理。 编写一段程序,使用系统调用 fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;...

    3操作系统实验报告.docx

    解: linux 系统创建进程都是用 fork() 系统调用创建子进程. 当首次调用新创建进时,其入口在哪里? 解: 由 fork() 系统调用创建的新进程被称为子进程。该函数被调用一次,但返回两次。如果 fork()进程调用成功,两次...

    进程的创建控制实验

    目的:创建进程,体会进程间的并发特征 内容:编写一段程序,使用系统调用fork()创建两个子进程p1和p2...(2)利用系统调用sleep()调整父进程及各子进程的并发执行过程;(3)认真查看和比较每次执行结果,分析原因。

    linux操作系统实验一

    调试下面源程序:系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察纪录...

    操作系统课程设计

    2)进程的软中断通信使用系统调用fork()创建两个子进程,使用系统调用signal()让父进程捕捉用alarm函数设置时钟的时间段终止时产生的信号,当捕捉到该信号后,父进程使用系统调用Kill()向两个子进程发出信号,子...

    3操作系统实验.doc

    实验一:信号机制 实验目的 1、了解什么是信号 2、熟悉LINUX系统中进程之间软中断通信的基本原理 实验内容 1、编写程序:用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按^c键...

    C语言的fork函数在Linux中的进程操作及相关面试题讲解

    2.fork 函数被调用一次,但返回两次, 两次返回的唯一区别是子进程的返回值是 0, 而父进程的返回值是新子进程的 PID。 3.子进程和父进程继续执行 fork 调用之后的指令。 在上图的存储空间布局中,父子进程只共享正文...

    尚观史上Linux嵌入式开发系统课程

    ├day20_有名管道的特点、在子父进程及非子父进程间操作.mp4 ├day21-01 有名管道的创建、缓冲区大小、阻塞模式、信号.mp4 ├day21-02 有名管道进程间通信.mp4 ├day22_消息队列默认属性及改变方法.mp4 ├day23-01 ...

    进程管理 进程的软中断通信

    使用系统调用fork()创建两个子进程,使用系统调用signal()让进程捕捉用alarm函数设置时钟的时间段终止时产生的信号,当捕捉到该信号后,父进程使用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后...

    linux操作系统+进程与线程+实验报告及代码+期末复习

    1.什么是进程?它与程序有何关系? 2.进程的类型?进程的启动方式? 3.什么是前台进程?什么是后台进程? 4.如何查看进程?...8.(附加题)尝试分别写一个小程序使用fork()、vfork、clone()创建子进程或线程。

Global site tag (gtag.js) - Google Analytics