Linux进程创建之fork()函数
来源:互联网 发布:云计算培训机构 编辑:程序博客网 时间:2024/05/16 02:43
Linux进程概念及其管理调度
进程概述:
传统的程序本身是一组指令的集合,是一个静态实体,无法描述程序在内存中的执行情况,也就不能如实反映程序并发执行过程的特征。 进程是操作系统进行资源分配和高度的独立单位,是程序在计算机上的一次执行过程。进程是动态概念,它可以申请和拥有系统资源,也是活动的实体。 进程由**程序段、数据段和进程控制块**组成。 进程控制块:描述和控制程序运行的一个数据结构,也称为**PCB**。 程序段和数据段:分别存放**进程运行的程序和需要的数据**。 进程特征:**并发性、动态性、异步性、独立性**。 进行执行时间间断性,运行中的进程可能有三种状态:就绪状态、执行状态和阻塞状态。三种基本状态转换方式:**阻塞->就绪,就绪->执行,执行->就绪,执行->阻塞**。 程序是静态,进程是动态。程序作为一种资料长期永久存在,进程是有生命周期,是暂时存在的。同一程序可以对应多个进程。程序并能独立运行,作为资源分配和独立运行的基本单元都是进程。 Linux进程用一个**task_struct**数据结构来表示,它就是Linux进程的PCB。 进程控制块(PCB):进程状态、进程调度信息、进程标识符、进程通信信息、进程链接信息、进程相关的文件信息、进程时间信息、进程虚拟内存信息等。 Linux进程在内存中由三个部分组成:**堆栈段、代码段和数据段**。 Linux调度器将进程分为三个不同的类型:交互进程、批处理进程、监控进程(守护进程)。
进程的创建:
pid_t fork( void);[函数参考](http://pubs.opengroup.org/onlinepubs/9699919799/)
例子
#include <unistd.h>#include <cstdio>int main(void){ int status; // process status pid_t pid_child; pid_child = fork(); // create a process whitch is same as pProcess(parent process). printf("pid : %d pid_child : %d\n", getpid(),(int)pid_child); switch (pid_child) { case -1: // check cProcess whether been created printf("fork process create failed!!!\n"); break; case 0: printf("fork process create success!!! pid = %d\n", (int)getpid()); break; default: // This path would be executed by pProcess printf("default : pPid : %d cPid : %d\n", getpid(), (int)pid_child); printf("dest_flag0 pid : %d pid_child : %d\n", getpid(),(int)pid_child); break; } // common path printf("dest_flag1 pid : %d pid_child : %d\n", getpid(),(int)pid_child); return 0;}
输出结果:
pid : 48793 pid_child : 0pid : 48787 pid_child : 48793default : pPid : 48787 cPid : 48793fork process create success!!! pid = 48793dest_flag0 pid : 48787 pid_child : 48793dest_flag1 pid : 48793 pid_child : 0dest_flag1 pid : 48787 pid_child : 48793
tip:
从以上结果可以看出common path(父子进程都被判断执行的部分)的语句被打印了两次
总结:
fork()函数在执行后: 创建的子进程有一个独特的进程ID。 创建的子进程ID不匹配任何活动的进程组ID。 创建的子进程ID与父进程不同。
0 0
- Linux进程创建之fork()函数
- Linux进程创建fork()函数
- linux进程之fork函数
- Linux 内核--fork()函数创建进程
- Linux 内核--fork()函数创建进程
- Linux 内核--fork()函数创建进程
- linux下fork函数创建进程
- LInux 子进程创建函数fork简介
- Linux创建进程的fork()函数
- linux下利用fork()函数创建进程
- Linux下进程创建Fork()函数分析
- Linux 创建子进程函数 --- fork
- 进程创建函数之fork()和vfork()
- linux之fork,vfork创建子进程
- fork函数创建进程
- 创建进程-fork函数
- Linux进程创建之fork()v与fork()
- Linux:fork进程创建
- 统计字符_HDU
- java 加密之数字签名算法
- 什么是泛型?
- TCP第四次挥手为什么要等待2MSL
- 【九度OJ】题目1201:二叉排序树 解题报告
- Linux进程创建之fork()函数
- C++之多态(纯虚函数+RTTI+异常处理)
- maven的简单使用方法,添加公共jar和第三方jar包
- 【HDU-oj】-4920-Matrix multiplication(矩阵,裸)
- 关于hololens调用讯飞语音sdk问题汇总
- Angular开发者指南(一)入门介绍
- poj2251(翻译)
- 在Oracle 11.2.0.3.0上开启大页(hugepages)的详细解析
- 734C Anton and Making Potions