函数原型

pid_t fork(void);

fork的奇异之处在于它被调用一次,却返回两次,它可能有三种不同的返回值:

1、在父进程中。fork返回新创建的子进程的PID

2、在子进程中,fork返回0。

3、假设出现错误,fork返回一个负值。

用途:

1、一个进程希望复制自身。从而父子进程能同一时候运行不同段的代码。

2、进程想运行另外一个程序

#include <sys/types.h>
#include <unistd.h> int main(){
pid_t pid; /*此时仅有一个进程*/
pid = fork(); /*此时已有两个进程在同一时候运行*/
if( pid < 0)
printf("error in fork!\n");
else if(pid == 0)
printf("I am the child process, ID is %d\n",getpid());
else
printf("I am the parent process, ID is %d\n",getpid());
return 0;
}

在 pid = fork() 之前,仅仅有一个进程在运行,但在这条语句之后。就变成两个进程在运行了,这两个进程共享代码段。将要运行的下一条语句就是 pid = fork() 之后的语句。两个进程中,原来就存在的那个进程被称作为”父进程”,新出现的那个进程被作为”子进程”,父子进程的差别在于进程标识符(PID)不同。

子进程的数据空间、堆栈空间都会从父进程得到一个拷贝,而不是共享。

pid_t vfork(void);

1、在父进程中,fork返回新创建的子进程的PID

2、在子进程中。fork返回0。

3、假设出现错误,fork返回一个负值。

用途:

用vfork创建的进程主要目的是用exec函数族运行另外的程序,与fork的第二个用途同样

fork 和 vfork 的差别

fork:子进程拷贝父进程的数据段。堆栈。

vfork:子进程与父进程共享数据段,堆栈。

fork:父、子进程的运行次序不确定

vfork:子进程先运行,父进程后运行

版权声明:本文为博主原创文章。未经博主同意不得转载。

  • 本文已收录于下面专栏:

Linux C编程--进程介绍1--进程的创建

这篇文章介绍的内容包含
1.Linux进程--进程标识号
2.进程控制--进程创建

1.Linux进程--进程标识号

进程(Process)是一个程序在其自身的虚拟地址空间...

  • DLUTBruceZhang
  • 2013年03月02日 19:46
  • 2239

Linux C进程与多线程入门—(1)创建进程

本文出自http:http://www.wenbanana.com/?p=351稻草人博客,欢迎訪问。 

进程和程序的差别

进程和程序的差别能够理解为,进程是活动的程序,而程序是一个代...

  • wen294299195
  • 2013年01月28日 15:14
  • 2031

LINUX shell和进程创建

一、在LINUX系统中须要用到shell来执行命令。那么shell究竟是什么?
       维基百科:Unix shell也叫做命令行界面,它是Unix操作系统下传统的用户和计算机的交互界面。用户...
  • mxg1991
  • 2014年04月28日 21:25
  • 1298

linux C 守护进程及其创建

涉及的概念:
守护进程:在linux或者unix操作系统中在系统引导的时候会开启非常多服务,这些服务就叫做守护进程。为了添加灵活性,root能够选择系统开启的模式。这些模式叫做执行级别。每一种执行级别以...
  • u010927811
  • 2013年07月24日 11:10
  • 814

Linux C创建守护进程(daemon)及终端相关概念

引言
        所谓守护进程(daemon),是不具备控制终端的,经常是在系统引导装入时启动,仅在系统关闭时才终止,输出的报告信息一般在日志文件。

        守护进程没有控制终端通常源...

  • Jammg
  • 2016年04月06日 12:13
  • 898

linux c之创建进程fork和vfork函数之间的差别

1、函数简单介绍
      1)、得到当前的进程id

pid_t getpid();

      2)、fork函数
         要创建进程。必须调用fork函数, 系统调用for...

  • u011068702
  • 2017年01月12日 20:36
  • 415

linux c之管道的介绍、创建关闭和简单读写(父进程向子进程写入数据)

1、管道介绍、
       进程间通信的几种主要手段中。

当中管道和有名管道是最早的进程间通信机制之中的一个,管道可用于具有亲缘关系进程间的通信。有名管道克服了管道没有名字的限制,因此。除具

      ...

  • u011068702
  • 2017年02月07日 20:01
  • 1217

Linux C编程--进程介绍1--进程的创建

这篇文章介绍的内容包含

1.Linux进程--进程标识号

2.进程控制--进程创建

1.Linux进程--进程标识号

进程(Process)是一个程序在...

  • oLinXi1234567
  • 2014年04月23日 12:24
  • 237

Linux C进程与多线程入门—(1)创建进程

本文出自http:http://www.wenbanana.com/?p=351稻草人博客。欢迎訪问!

 

进程和程序的差别

进程和程序的差别能够理解为,进程是活动的程序。而程序是一个代...

  • wen294299195
  • 2013年01月28日 15:14
  • 2031

Linux c进程管理—创建进程 system、execl、execlp、fork

Linux c 进程管理:
 
1.      创建进程:
       system函数:
        int system(const char*filename);
            ...
  • Y_23k_bug
  • 2013年08月10日 21:56
  • 6669

1.Linux进程--进程标识号的更多相关文章

  1. Linux 查看进程基本命令

    https://www.cnblogs.com/zwgblog/p/5971455.html https://www.cnblogs.com/lcword/p/6046261.html https:/ ...

  2. Linux学习笔记(16)Linux前后台进程切换(fg/bg/jobs/ctrl+z)

    关键词:Linux前后台进程切换,linux进程切换 fg.bg.jobs.&.ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的一.& ...

  3. linux管理进程的链表

    linux2.6.11的内核中,为了方便管理linux的进程,主要建了5种linux链表.每个链表节点之间的互联有两种方式,一种是hash节点之间的互联,通过hlist_node的数据结构来实现:另一 ...

  4. [转载]了解Linux的进程与线程

    本文转自Tim Yang的博客http://timyang.net/linux/linux-process/ .对于理解Linux的进程与线程非常有帮助.支持原创.尊重原创,分享知识! 上周碰到部署在 ...

  5. Linux任务调度进程crontab的使用方法和注意事项

    参考文章:Linux任务调度进程crond命令的使用方法和注意事项 一.crond简介 概念 crond的概念和crontab是不可分割的.crontab是一个命令,常见于Unix和类Unix的操作系 ...

  6. Linux 利用进程打开的文件描述符(/proc)恢复被误删文件

    Linux 利用进程打开的文件描述符(/proc)恢复被误删文件 在 windows 上删除文件时,如果文件还在使用中,会提示一个错误:但是在 linux 上删除文件时,无论文件是否在使用中,甚至是还 ...

  7. linux 下进程通讯详解

    linux 下进程通讯方法主要有以下六种: 1.管道 2.信号 3.共享内存 4.消息队列 5.信号量 6.socket

  8. .NET跨平台实践:用C#开发Linux守护进程

    Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...

  9. .NET跨平台实践:用C#开发Linux守护进程(转)

    Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...

随机推荐

  1. Laravel Eloquent 自定义返回字段

    返回指定字段 Book::select("price", "name")->all(); 返回关系字段关联的属性 Book::select("p ...

  2. Java8 容器类详解

      ArrayList Vector CopyOnWriteArrayList LinkedList HashMap ConcurrentHashMap LinkedHashMap 使用场景 随机访问 ...

  3. python 全栈开发,Day72(昨日作业讲解,昨日内容回顾,Django多表创建)

    昨日作业讲解 1.图书管理系统 实现功能:book单表的增删改查 1.1 新建一个项目bms,创建应用book.过程略... 1.2 手动创建static目录,并在目录里面创建css文件夹,修改set ...

  4. equals&&==的使用

    package stringyiwen; /* * ==:比较运算符,在基本数据类型比较的是值* ==:引用数据类型比较的是地址值 *//* * equals方法:[只]用于[引用数据数据类型],如果 ...

  5. 用函数打印Hello js

    <script> function sayHello() { document.write("Hello js!"); } sayHello(); </scrip ...

  6. Type in Chakra

    Type in Chakra Javascript是一个无类型的语言. 我们要讨论的类型是指Chakra内置的一些数据结构,这些结构维护了Object的信息. Type在一类Object中共享数据,使 ...

  7. 《必须知道.NET》3.OO之美

    3.2 依赖的哲学 3.2.1 本质诠释 "不要调用我们,我们会调用你" 3.2.2 什么是依赖,什么是抽象 "耦合是不可避免的" (1)什么是依赖和耦合 依赖 ...

  8. 国内最火5款Java微服务开源项目

    目录 1.pig 2.zheng 3.Cloud-Platform 4.SpringBlade 5.Guns 1.pig 开源地址:https://gitee.com/log4j/pig 基于Spri ...

  9. .NET中JSON序列化(数据集转JSON)

    Json序列化和反序列化指的是:对象序列化为JSON,并可用于从 JSON 反序列化对象 在.net 3.5中已支持JSON,引用命名空间: using System.Web.Script.Seria ...

  10. python常用内建模块--base64

    Base64是一种任意二进制到文本字符串的编码方法,常用于在URL.Cookie.网页中传输少量二进制数据. import base64 a = 'abcdef/+'b= base64.b64enco ...