1. 先贴代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> int globvar = 6; /* external variable in initialized data */ int main(void)
{
int var; /* automatic variable on the stack */
pid_t pid; var = 88;
printf("before vfork, pid=%d \n", getpid()); /* we don't flush stdio */ if ( (pid = vfork()) < 0 )
{
printf("vfork error");
}
else if (pid == 0)
{
sleep(1); /* child */ printf("child: pid=%d \n", getpid());
globvar++; /* modify parent's variables */
var++;
//exit(0); /* child terminates */
}else{ printf("Im Parant \n");
} /* parent continues here */
printf("pid = %ld, glob = %d, var = %d\n", (long)getpid(), globvar, var); printf("1. pid=%d \n", getpid());
sleep(3);
printf("2. pid=%d \n", getpid());
printf("3. pid=%d \n", getpid()); _exit(0);
}

2.

运行:

root@lmw-virtual-machine:/home/lmw/MINE/Linux_C_exercise/vfork#
root@lmw-virtual-machine:/home/lmw/MINE/Linux_C_exercise/vfork# gcc test1.c -o ab
root@lmw-virtual-machine:/home/lmw/MINE/Linux_C_exercise/vfork# ./ab
before vfork, pid=13810
child: pid=13811
pid = 13811, glob = 7, var = 89
1. pid=13811
2. pid=13811
3. pid=13811
Im Parant
pid = 13810, glob = 7, var = 89
1. pid=13810
2. pid=13810
3. pid=13810
root@lmw-virtual-machine:/home/lmw/MINE/Linux_C_exercise/vfork#
root@lmw-virtual-machine:/home/lmw/MINE/Linux_C_exercise/vfork#

分析:

即使上述代码处存在sleep(3)这个延时,运行发现子进程一定是先运行的,而且会运行到exit后才轮到父进程执行。

并且vfork后子进程改变的栈数据和全局数据是会影响到父进程内的。

小结: 1. vfork后,保证子进程先运行,在子进程调用exit等函数后主进程才会继续运行。

2. vfork创建的子进程与父进程共享数据段。

关联博文:

系统编程-进程-fork深度理解、vfork简介

.

系统编程-进程-vfork使用、浅析的更多相关文章

  1. Linux系统编程@进程通信(一)

    进程间通信概述 需要进程通信的原因: 数据传输 资源共享 通知事件 进程控制 Linux进程间通信(IPC)发展由来 Unix进程间通信 基于System V进程间通信(System V:UNIX系统 ...

  2. linux系统编程-进程

    进程 现实生活中 在很多的场景中的事情都是同时进行的,比如开车的时候 手和脚共同来驾驶汽车,再比如唱歌跳舞也是同时进行的: 如下是一段视频,迈克杰克逊的一段视频: http://v.youku.com ...

  3. Linux系统编程@进程管理(一)

    课程目标: 构建一个基于主机系统的多客户即时通信/聊天室项目 涉及的理论知识 进程控制:僵尸进程/孤儿进程.进程控制.守护进程... 进程间通信:管道.命名管道.信号... 多线程编程: 锁.信号量. ...

  4. linux服务器开发二(系统编程)--进程相关

    进程相关的概念 程序与进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(CPU.内存.打开的文件.设备.锁等等). 进程,是一个抽象的概念,与操作系统原理联系紧密.进程是活跃的程序,占用系 ...

  5. Linux系统编程@进程管理(二)

    1.创建守护进程(Deamon) 守护进程的概念与作用 后台服务程序 – 系统服务,进程名字往往以’d’结尾,生存周期比较长(系统装入时启动,关闭时候终止.系统装入两种启动方式:1从启动脚本.etc/ ...

  6. [linux] C语言Linux系统编程进程基本概念

    1.如果说文件是unix系统最重要的抽象概念,那么进程仅次于文件.进程是执行中的目标代码:活动的.生存的.运行的程序. 除了目标代码进程还包含数据.资源.状态以及虚拟化的计算机. 2.进程体系: 每一 ...

  7. Linux系统编程——进程替换:exec 函数族

    在 Windows 平台下,我们能够通过双击运行可运行程序,让这个可运行程序成为一个进程.而在 Linux 平台.我们能够通过 ./ 运行,让一个可运行程序成为一个进程. 可是.假设我们本来就执行着一 ...

  8. Linux系统编程-----进程fork()

    在开始之前,我们先来了解一些基本的概念: 1. 程序, 没有在运行的可执行文件 进程, 运行中的程序 2. 进程调度的方法: 按时间片轮转 先来先服务 短时间优先 按优先级别 3. 进程的状态: 就绪 ...

  9. python之系统编程 --进程

    1.调试(PDB) 代码: [root@master gaoji]# vim test2.py 1 #!/usr/local/bin/python3 2 # -*- coding:utf-8 -*- ...

  10. Linux系统编程—进程间同步

    我们知道,线程间同步有多种方式,比如:信号量.互斥量.读写锁,等等.那进程间如何实现同步呢?本文介绍两种方式:互斥量和文件锁. 互斥量mutex 我们已经知道了互斥量可以用于在线程间同步,但实际上,互 ...

随机推荐

  1. 学习笔记--Java中final关键字

    Java中final关键字 关于Java语言中的final关键字: final是一个关键字,表示:最终的,不可改变 final修饰的类无法被继承 final修饰的方法无法被覆盖 final修饰的变量一 ...

  2. 通过程序名称kill掉所有的进程

    通过程序名称kill掉所有的进程 今天差点把服务器搞崩了. 脚本的循环条件有问题,结果起了无数的nslookup,用pkill杀不掉,只能用kill一个个解决,服务器还被搞得慢得要命. 还好又黄队长, ...

  3. java程序设计期末复习总结&复盘

    java复习 java的特点:简单.面向对象.可移植.跨平台.分布式.多线程.稳定安全.高性能 一个数组可以存放许多不同类型的数值. (F) StringBuffer类是线程安全的,StringBui ...

  4. SpringBoot 配置统一API对象返回

    1.前言 在实际项目开发中,为了便于前端进行响应处理,需要统一返回类格式.特别是在有多个后端开发人员参与的情况下,如果不规范返回类,每个人按照个人习惯返回数据,前端将面临各式各样的返回数据,难以统一处 ...

  5. 【Java】Excel 读写图片工具类

    一.需求背景: 做一个大屏管理系统,基础信息包括管理的应用名称,大屏的截图,通过一个excel批量导入 excel的单元格里要插入图片,对应一个大屏应用的信息 导入需要读取到大屏截图,至于存哪还没说. ...

  6. 【Scala】01 基础了解

    Features 特性 1.基于JVM,完全兼容Java 2.同样具有跨平台,可移植,垃圾回收 3.比Java更加的面向对象[完全面向对象] 4.函数式编程 5.面向大数据处理,对集合容器框架有一定的 ...

  7. 【Java】数组强转问题

    问题产生 问题代码: List<String> strs = new LinkedList<String>(); // 中间有添加元素的操作,这里省略... // 这里toAr ...

  8. 从.net开发做到云原生运维(一)——从.net framework过渡到.net core

    1. 前言 序篇讲了自己的一些感悟和经历,从这章开始就开始讲一些.net技术栈的东西了. 2. .net framework和.net core对比 .NET Framework 概述 .NET Fr ...

  9. pip install --user 使用方法和注意事项——python中安装module库到用户packages路径中

    pip install --user   是python中安装module库到用户packages路径中的方法. 参考: https://blog.csdn.net/The_Time_Runner/a ...

  10. 强化学习:reward function shaping —— 着陆器(lander)游戏中的奖励函数的设计

    lander 游戏是强化学习问题中常使用的一个游戏场景,不同人对该问题都设置了不同的reward function,一直也没有对该游戏的各种reward function的设计做一个记录,正好看视频看 ...