Linux多进行之fork
#include <unistd.h> //定义该函数
#include <sys/types.h> //定义函数的返回类型pid_t
/*
功能:复制进程
参数:无
返回值: 成功: 父进程:返回子进程id
子进程:返回0
失败: 返回-1
*/
pid_t fork(void); 函数说明:
一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。
数据共享:
子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。
UNIX将复制父进程的地址空间内容给子进程,因此,子进程有了独立的地址空间。在不同的UNIX (Like)系统下,我们无法确定fork之后是子进程先运行还是父进程先运行,这依赖于系统的实现。所以在移植代码的时候我们不应该对此作出任何的假设。
或者说两进程共享代码空间,但是数据空间是互相独立的,子进程数据空间中的内容是父进程的完整拷贝,指令指针也完全相同,子进程拥有父进程当前运行到的位置(两进程的程序计数器pc值相同,也就是说,子进程是从fork返回处开始执行的)。

测试代码:
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
int main(void)
{
pid_t pid;
pid=fork();
switch (pid)
{
case -:
perror("fork error");
exit();
case :
printf("I am the child process, my process id is %d/n", getpid());
break;
default:
printf("I am the parent process, my process id is %d/n", getpid());
break;
}
return ;
}
参考学习资料
请问下面的程序一共输出多少个“-”
Linux多进行之fork的更多相关文章
- 关于linux系统如何实现fork的研究(二)
		
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 前一篇关于linux系统如何实现fork的研究(一)通过代码已经说明了从用户态怎么通过软中断实现调用系统调 ...
 - 关于linux系统如何实现fork的研究(一)
		
引言 fork函数是用于在linux系统中创建进程所使用,而最近看了看一个fork()调用是怎么从应用到glibc,最后到内核中实现的,这片文章就聊聊最近对这方面研究的收获吧.我们主要聊聊从g ...
 - 关于linux系统如何实现fork的研究(二)【转】
		
转自:http://www.aichengxu.com/linux/7166015.htm 本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 前一篇关于li ...
 - 关于linux系统如何实现fork的研究(一)【转】
		
转自:http://www.aichengxu.com/linux/4157180.htm 引言 fork函数是用于在linux系统中创建进程所使用,而最近看了看一个fork()调用是怎么从应用到gl ...
 - linux第1天  fork exec 守护进程
		
概念方面 文件是对I/O设备的抽象表示.虚拟存储器是对主存和磁盘I/O设备的抽象表示.进程则是对处理器.主存和I/O设备的抽象表示 中断 早期是没有进程这个概念,当出现中断技术以后才出现进程这个概念 ...
 - linux内核分析之fork()
		
从一个比较有意思的题开始说起,最近要找工作无意间看到一个关于unix/linux中fork()的面试题: #include<sys/types.h> #include<stdio.h ...
 - linux进程原语之fork()
		
一.用法解析: fork()这个函数,可以说是名如其人了,众所周知fork这个单词本意为叉子,老外取学术名字的时候总会有一些象形的想法,于是就有了下图~ fork()函数是计算机程序设计中的分叉函数. ...
 - 1.1   Linux中的进程 --fork、孤儿进程、僵尸进程、文件共享分析
		
操作系统经典的三态如下: 1.就绪态 2.等待(阻塞) 3.运行态 其转换状态如下图所示: 操作系统内核中会维护多个队列,将不同状态的进程加入到不同的队列中,其中撤销是进程运行结束后,由内核收回. 以 ...
 - linux/unix 编程手册  fork()函数
		
父进程通过fork()函数创建子进程,将父进程数据段和栈的内容拷贝到子进程中,子进程执行程序execve创建新程序,调用exit函数退出到等待wait(),挂起父进程, 父子进程享用相同的程序文本段. ...
 - linux源代码阅读笔记   fork和execve的区别
		
1. man exec就可以知到: The exec() family of functions replaces the current process image with a new proce ...
 
随机推荐
- Count Color
			
Description Chosen Problem Solving and Program design as an optional course, you are required to sol ...
 - sql语句判断方法之一
			
sql语句判断方法之一CASE语句用法总结 背景: Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN ' ...
 - vb.net  Linq 筛选(像 select distinct) DateTable 日期数据中的年份
			
Private Sub initDDLByYear(ByVal dt As DataTable) ddlByYear.Items.Clear() ddlByYear.Items.Add(") ...
 - const 指针与指向const的指针
			
最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变 ...
 - 转: OpenResty最佳实践
			
https://moonbingbing.gitbooks.io/openresty-best-practices/content/ centOS安装另加内容 ln -sf luajit-2.1.0- ...
 - 转:nginx 从入门到精通的博文
			
转:http://tengine.taobao.org/book/ Nginx开发从入门到精通 缘起 nginx由于出色的性能,在世界范围内受到了越来越多人的关注,在淘宝内部它更是被广泛的使用,众 ...
 - java url中文  编译和解码
			
js到servlet: js端 var minename='中文'; minename=encodeURI(encodeURI(minename)); java servlet 端 String na ...
 - (转)linuxmint,ubuntu 下修改guake宽度方法
			
之前在网上找到修改guake.py的方式,但是我一直没能找到guake.py的文件,弄的我纠结,后来找到这个文章,这个确实是有效果的 Ubuntu12.04上Guake在唤出的时候滚动条会消失,主要原 ...
 - Jquery中bind和live的区别
			
Jquery中绑定事件有三种方法:以click事件为例 (1)target.click(function(){}); (2)target.bind("click",function ...
 - HDOJ2029Palindromes _easy version
			
Palindromes _easy version Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...