函数原型

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. 前端工程化-webpack-cli(官方开发中。。。)

  2. VS2008/2005 MFC程序调试经验

    我的VS2008不知道是有bug还是自己的问题,很多时候变量定义后CTRL+F5运行却没反应,一定要“生成解决方案”下才行? 1.没有可用于当前位置的源代码 将工具->选项->调试-> ...

  3. python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)

    一.MongoDB初识 什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介 ...

  4. Web开发.net framework 类库中必须掌握的命名空间(或者类)【转】

    Web开发常用命名空间和类. System.Collections //命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合.System.Collections ...

  5. JS高级 - 面向对象3(面向过程改写面向对象)

    改写: 1.前提:所有东西都在 onload 里 2.改写:不能有函数嵌套,可以有全局变量 onload --> 构造函数 全局变量 --> 属性 函数 --> 方法 4.改错: t ...

  6. hdu 1253 3维迷宫 在规定时间内能否出迷宫 (3维BFS)

    题意:有一个人要在魔王回来之前逃出城堡.1表示墙,0表示路.魔王将在T分钟后回到城堡 起点可以是墙,但是人能走出.而终点也可以是墙,那自然就走不出了,但是要判断. 剪枝:如果终点是门或者从起点到终点的 ...

  7. [转] 基于NodeJS的前后端分离的思考与实践(五)多终端适配

    前言 近年来各站点基于 Web 的多终端适配进行得如火如荼,行业间也发展出依赖各种技术的解决方案.有如基于浏览器原生 CSS3 Media Query 的响应式设计.基于云端智能重排的「云适配」方案等 ...

  8. codeforces 758D Ability To Convert【DP】

    在N进制下给你一个数,要你转换成最小的十进制数; 状态转移方程:从前向后 dp[j]表示j位前数列的最小十进制数 dp[j]=min(dp[j],dp[i]*n+x) 程序: #include < ...

  9. python全栈开发day21-2 几个装饰器总结

    1 @property 将一个方法伪装成属性 2.@propertty @f.setter 设置伪装成方法的属性 3.@propertty @f.deleter 删除一个伪装成方法的属性. class ...

  10. PhpStorm 中切换PHP版本

    PhpStorm 中默认的 PHP 版本是 PHP 5.4 ,PhpStorm 会以该版本对编辑器中的PHP文件进行自动校验.EX:PHP文件中,使用了 PHP 5.4 版本以上的新特性,由于 Php ...