linux创建进程fork的方法步骤
fork创建进程
函数原型如下
#include// 必须引入头文件,使用fork函数的时候,必须包含这个头文件,否则,系统找不到fork函数
pid_t fork(void); //void代表没有任何形式参数
父进程与子进程
1.掌握概念,什么是父进程,什么是子进程
除了0号进程(系统创建的)之外,linux系统中都是由其他进程创建的。创建新进程的进程,即调用fork函数的进程为父进程,新建的进程为子进程。
2.fork函数不需要任何参数,对于返回值有三种情况
1)对于父进程,fork函数返回新建子进程的pid;
2)对于子进程,fork函数返回 0;
3)如果出错, fork 函数返回 -1。
创建进程案例(fork.c)
#include
#include
#include
int main(void)
{
pid_t pid ;
pid = fork();
if(pid < 0)
{
printf("fail to fork\n");
exit(1);
}
if(pid == 0)
{
printf("this is the child,pid is : %u\n",getpid());
exit(0);
}
if(pid > 0)
{
printf("this is the parent\n");
exit(0);
}
return 0;
}
在shell中编译该程序如下:
gcc fork.c -o fork
在shell中运行该程序如下:
./fork
最后输出结果:

再次运行结果如下:

父子进程共享资源
1.父子进程共享代码段(可读的)
父进程在创建子进程的时候,子进程会把父进程的地址空间里的数据段。和栈堆进行复制,但是没有复制代码段。
2.详细可看具体代码示例(fork_1.c)
fork_1.c
#include
#include
#include
int global; // 全局变量在数据段中
int main()
{
pid_t pid;
int stack = 1; // 局部变量在栈中
int * heap;
heap = (int *)malloc(sizeof(int)); //在堆中
*heap = 2;
pid = fork();
if(pid < 0)
{
printf( " fail to fork\n " ) ;
exit(1) ;
}
if( pid == 0 )
{
global++ ;
stack ++ ;
(*heap)++ ;
printf ( " the child , data : %d , stack : %d , heap : %d\n", global , stack , * heap ) ;
exit(0) ;
}
sleep(2) ;
printf("the parent, data : %d, stack : %d, heap : %d\n", global , stack , *heap);
return 0 ;
}
运行结果如下:

fork函数出错的情况
1.fork函数返回值为-1即创建失败,有两种情况可能会导致fork 函数出错;
2.系统中已经有太多的进程存在;
3.调用fork函数的用户的进程太多。
原文链接:http://www.maiziedu.com/wiki/process/fork/
linux创建进程fork的方法步骤的更多相关文章
- [转]❲阮一峰❳Linux 守护进程的启动方法
❲阮一峰❳Linux 守护进程的启动方法 "守护进程"(daemon)就是一直在后台运行的进程(daemon). 本文介绍如何将一个 Web 应用,启动为守护进程. 一.问题的由来 ...
- Linux 命令详解(六)Linux 守护进程的启动方法
Linux 守护进程的启动方法 http://www.ruanyifeng.com/blog/2016/02/linux-daemon.html
- linux创建子进程--fork()方法
(1)fork()的定义 fork()函数是Unix中派生新进程的唯一方法,声明如下: #include <unistd.h> pid_t fork(void); 我们需要理解的是,调用一 ...
- 【操作系统】linux创建子进程--fork()方法
(1)fork()的定义 fork()函数是Unix中派生新进程的唯一方法,声明如下: #include <unistd.h> pid_t fork(void); 我们需要理解的是,调用一 ...
- 创建进程,join方法,进程对象相关属性和方法,僵尸进程和孤儿进程,守护进程,互斥锁
创建进程 在python中提供了一个multiprocessing模块可以帮助我们使用多进程解决问题.在multiprocessing 模块中有一个类Process. from multiproces ...
- 转:Linux创建进程
转:http://www.cnblogs.com/GT_Andy/archive/2011/06/21/2086129.html 我们都知道,进程就是正在执行的程序.而在Linux中,可以使用一个进程 ...
- C语言 进程控制---创建进程fork()函数
#include "sys/types.h" #include "stdio.h" #include "stdlib.h" #include ...
- Linux下进程隐藏的方法及其对抗
零.背景 在应急响应中,经常碰到ps命令和top命令查不到恶意进程(异常进程)的情况,会对应急响应造成很大的影响.轻则浪费时间,重则排查不出问题,让黑客逍遥法外.所以这篇博客研究学习如何对抗linux ...
- linux创建进程和等待进程退出
在WIN32下,在一个进程里我们可以使用CreateProcess()创建一个进程,然后通过调用WaitForSingleObect(), WaitForMultipleObject()等待进程退出. ...
随机推荐
- iis下搭建通过phpstudy集成的环境,phpmyadmin导入数据库无法应解决办法
本人非常喜欢phpstudy的集成php+mysql环境,一键搞定,但是不知道为什么搭建的phpmyadmin的数据库管理器,无法上传,点击无反应 发现上传数据的界面有点不同 正常情况下是这样的: 非 ...
- 深入理解JavaScript运行机制
深入理解JavaScript运行机制 前言 本文是写作在给团队新人培训之际,所以其实本文的受众是对JavaScript的运行机制不了解或了解起来有困难的小伙伴.也就是说,其实真正的原理和本文阐述的并不 ...
- 利用Simple-RTMP-Server(SRS)来进行直播
1.下载SRS 官方地址:http://www.ossrs.net/srs.release/releases/ 百度地址:http://pan.baidu.com/s/1kV8WQpx 2.编译安装S ...
- [SE0]简单的搜索引擎原理
1.简单了解搜索引擎收录的原理 包括baidu. google .yahoo 在内的各大搜索引擎在内基本上搜录网站的原理大致相同(除了国内某些网站 网1新 l 等采取人工登记的办法),搜索引擎都是采 ...
- HTML5 与 CSS3 jQuery部分知识总结【转】
一. HTML5 为什么需要HTML5 什么是HTML5 HTML5现状及浏览器支持 HTML5优点与缺点 HTML5语法规则与文档声明 HTML5新增表达标签 HTML5多媒体组件 HTML5 ...
- hdu 2037简单贪心--活动安排问题
活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很好例子.该问题要求高效地安排一系列争用某一公共资源的活动.贪心算法提供了一个简单.漂亮的方法使得尽可能多的活动 ...
- 使用nodeJs安装Vue-cli
TIP:win10下安装,使用管理员身份进行,否则会有权限限制. 1,安装完成node,node有自带的npm,可以直接在cmd中,找到nodeJs安装的路径下,进行命令行全局安装vue-cli.(n ...
- java执行linux命令
package com.gtstar.collector; import java.io.BufferedReader;import java.io.IOException;import java.i ...
- Odoo 二次开发教程(五)-新API的介绍与应用
[关于odoo新API的介绍,Internet上资料很少,或者不够完整详实,这会对初学者造成很大的困惑,本篇的目的就是希望能帮助新手了解新API的大概] odoo 新api的实现是借助于python装 ...
- webpack如何与gulpfile联合的使用
一.对webpack的一些理解 webpack支持CommonJS的书写形式. CommonJS指一个文件一个模块,但会一次性加载(即同步加载),但在浏览器端不适用这种方式,加载速率什么的,于是引入了 ...