进程控制
进程的定义:
进程是一个程序的一次执行的过程,同时也是资源分配的最小单元
进程的特点:动态性、并发性、独立性、异步性
进程的状态:
1 就绪、阻塞、执行
2 TASK_RUNNING(运行)
TASK_INTERRUPTIBLE(可中断)
TASK_UNINTERRUPTIBLE(不可中断)
TASK_ZOMBIE(僵死)
TASK_STOPPED(停止)
进程id
进程id(pid) 标识进程的唯一数字
父进程id(ppid)
启动进程的用户id(uid)
进程开互斥
当有若干进程都要使用某一共享资源时,任何时刻最多允许一个进程使用,其他要
使用该资源的进程必须等待,直到占用该资源者释放了该资源为止
临界资源
一次只允许一个进程访问的资源称为临界资源
临界区
访问临界资源的那段程序代码称为临界区
进程的同步
一组并发进程按一定的顺序执行的过程
进程调度
按一定算法从一组待运行的进程中选出一个来占有cpu运行
调度方式:抢占式、非抢占式
调度算法
先来先服务
短进程优先
高优先级优先
时间片轮转法
死锁
多个进程因竞争资源而形成的一种僵局,进程不能向前推进
进程控制编程
获取id
getpid()
#include <unistd.h>
pid_t getpid(void)
获取父进程序id
pid_t getppid(void)
进程创建
#include <unistd.h>
pid_t fork(void)
三种不同的返回值
在父进程中,返回子进程的pid
在子进程中,返回0
如果出现错误,返回一个负值
示例代码如下:
#include <unistd.h>
#include <stdio.h>
int main(void){
pid_t pid;
int count=0;
pid=fork;
printf("count=%d\n",count);
return 0;
}
运行结果:
count=1
count=1
子进程的数据空间、堆栈空间都会从父进程得到一个拷贝
#include <sys/types.h>
#include <unistd.h>
pid_t vfork(void)
fork和vfork的区别
1 fork 子进程拷贝父进程的数据段
vfork 子进程与父进程共享数据段
2 fork 父子进程的执行顺序不确定
vfork 子进程先运行,父进程后运行
exec函数族
exec用被执行的程序替换调用它的程序
与fork的区别:
fork是创建一个新的进程,产生一个新的pid
exec启动一个新程序,替换原有的进程,此进程的pid不会改变
#include <unistd.h>
int execl(const char *path,const char *arg1,...)
用来执行path字符串所代表的文件路径
arg1:被执行程序所需的命令行参数,含程序名,以空指针结束
示例代码如下:
#include <unistd.h>
main(){
execl("/bin/ls","ls","-al","/etc/passwd",(char *)0);
}
#include <unistd.h>
int execlp(const char *path,const char *arg1,...)
path:被执行程序名(不含路径名,将从path环境变量中查找该程序)
arg1:被执行程序所需的命令行参数,含程序名,以空指针结束
示例代码如下:
#include <unistd.h>
main(){
execl("ls","ls","-al","/etc/passwd",(char *)0);
}
#include <unistd.h>
int execv(const char *path,char *const argv[])
path:被执行程序名(含完整路径)
argv[]:被执行程序所需的命令行参数数组
#include <unistd.h>
main(){
char *argv[]={"ls","-al","/etc/passwd",(char *)0};
execl("/bin/ls",argv);
}
#include <unistd.h>
int execvp(const char *file,char *const argv[])
#include <stdlib.h>
int system(const char *string)
调用fork产生子进程,由子进程来调用/bin/sh -c string 来执行参数string所代表的命令
示例代码如下:
#include <unistd.h>
main(){
system("ls -al /etc/passwd");
}
进程等待
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status)
阻塞该进程,直到其某个子进程退出
示例代码如下:
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
void main(){
pid_t pc,pr;
pc=fork();
if(pc==0){/*如果是子进程*/
printf("this is child process with pid of %d\n",getpid());
sleep(10);/*睡眠10分钟*/
}else if(pc>0){/*如果是父进程*/
pr=wait(NULL);/*等待*/
printf("i catched a child process with pid of %d\n",pr);
}
exit(0);
}
- 浏览: 260520 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (303)
- c (31)
- c++ (16)
- java (18)
- c# (1)
- python (3)
- java web (6)
- oracle (7)
- sqlserver (2)
- mysql (2)
- android (24)
- android系统 (15)
- android多媒体部分 (15)
- android游戏 (12)
- linux (26)
- javaScript (1)
- ajax (1)
- node JS (2)
- html (5)
- apache (3)
- jboss (1)
- weblogic (0)
- 通信协议 (10)
- 云计算 (1)
- 分布式 (5)
- ejb (1)
- webservice (5)
- 设计模式 (16)
- JNI (6)
- swing (13)
- 版本控制 (1)
- UML (1)
- xml (4)
- spring (5)
- hibernate (5)
- struts1 (3)
- struts2 (4)
- ibatis (0)
- tomcat (2)
- 心得体会 (1)
- css (1)
- 嵌入式 (41)
- arm体系结构 (10)
发表评论
-
u-boot Makefile 文件分析
2013-06-01 21:44 2420Makefile文件分析 # #(C)Copyri ... -
uboot start.S文件分析
2013-06-03 22:18 1319U-boot第一个开始文件arch\arm\cpu\arm1 ... -
u-boot mkconfig文件分析
2013-05-31 21:29 1132Mkconfig文件分析 #!/bin/ ... -
链接地址学习笔记
2013-05-05 12:40 1279链接地址 启动过程 示例代码如下: ... -
DDR学习笔记
2013-05-11 14:19 1036DDR 15条地址线32k 128M*2(20)=2(2 ... -
nand flash学习笔记一
2013-05-13 21:05 958Nandflash 原理图上有data0-data7 ... -
openJTAG学习笔记一
2013-05-22 21:45 2171安装软件 光盘Windows\install目录下的 01.O ... -
linux进程管理学习笔记
2013-03-28 20:57 1352linux 进程管理 1 linux进程控制 进程的四个要素: ... -
字符设备驱动程序学习笔记一
2013-04-01 21:55 876linux 驱动程序 字符设备驱动程序 网络接口驱动程序 块设 ... -
字符设备驱动程序学习笔记二
2013-04-04 10:29 751字符驱动程序 1 设备号 字符设备通过字符设备文件来存取 ls ... -
字符设备驱动程序学习笔记三
2013-04-04 14:03 778memdev.h文件示例代码如下: #ifndef _MEM ... -
字符设备驱动程序学习笔记四
2013-04-05 11:12 581竟争与互斥 程序调试 1 ... -
GPIO学习笔记
2013-04-14 19:50 809用汇编点亮一个led 1看原理图GPK4=0,led亮G ... -
系统时钟学习笔记
2013-05-04 21:59 83312m晶振----->pll------>cpu ... -
UART学习笔记
2013-05-04 22:00 1149串口(UART) DIV_VAL=(PCLK/(bpsx1 ... -
linux内存管理学习笔记
2013-03-12 20:50 10631 linux内存管理 地址类型 物理地址 出现在cpu地址 ... -
嵌入式linux系统学习笔记
2013-03-06 21:39 962嵌入式linux内核制作 1 清除原有配置文件与中间文件 x8 ... -
原理图学习笔记一
2013-02-17 22:24 397画个草图也挺过瘾 -
进程间通信学习笔记一(管道通信)
2013-02-01 20:08 1406进程间通信(ipc) 应用场景: 数据传输 资源共享 通知事件 ... -
进程间通信学习笔记二(信号通信)
2013-02-16 21:39 783信号通信 用户按某些键时,产生信号 硬件异常产生信号 进程用k ...
相关推荐
本阅读笔记将深入探讨Linux进程的创建、进程控制以及守护进程的实现。 首先,让我们了解一下Linux中的进程创建。在Linux中,最常用的创建新进程的方式是使用`fork()`系统调用。`fork()`会创建一个与父进程几乎完全...
数据仓库学习笔记中提到,决策支持系统(DSS)处理是一个漫长而复杂的演化进程的结果,而且它仍在继续演化。DSS 处理的起源可以追溯到计算机发展的初期。数据仓库学习笔记还提到,决策支持系统的发展可以分为几个...
子进程继承了父进程的数据段、堆和栈,但拥有独立的进程控制块(PCB)。在子进程中,`fork()` 的返回值为0;在父进程中,返回的是子进程的PID。这使得程序能够根据返回值区分父子进程并执行不同的代码路径。 示例...
综上所述,这份学习笔记全面覆盖了操作系统的核心概念,从底层的保护模式编程到高层的进程管理和系统调用,对于想要深入理解操作系统的初学者来说是一份宝贵的资源。通过阅读和理解这些文档,不仅可以掌握操作系统的...
在学习笔记中,可能会包含一些典型的设计实例,如七段显示驱动器、UART串口控制器、简单的数字信号处理器等,帮助理解VHDL的实际应用。 8. **库和标准包** VHDL标准库包括IEEE库,其中的std_logic_1164库提供了...
在Linux操作系统中,进程是系统资源分配的基本单位。学习Linux的进程管理对于理解和操作系统的运行至关重要。本篇笔记主要探讨了以下几...在实际操作中,这些知识点可用于进程控制、进程通信、信号处理以及调试等场景。
标题:“Go学习笔记 第四版(书签版)”表明这是一份关于Go语言(又称Golang,是由Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言)的学习资料,这份资料已经更新到了第四版,并且特地...
本学习笔记将深入探讨信号量和进程间通信的相关概念、原理以及实际应用。 首先,让我们理解什么是进程。进程是程序执行的实例,拥有独立的内存空间和系统资源,它们在操作系统中并行运行。在多进程环境中,为了协调...
Contiki是一款非常适合于内存资源非常有限的嵌入式系统的操作系统,它...通过阅读Contiki的学习笔记和官方文档,结合实际开发经验,可以有效地掌握Contiki操作系统的原理和编程方法,为物联网应用开发打下坚实的基础。
Oracle是世界上最广泛使用的数据库管理系统之一,它提供了丰富的功能和组件,包括数据存储、查询优化、安全性、并发控制等。以下是对Oracle学习笔记中提到的一些关键知识点的详细解释: 1. **SQL执行顺序**: SQL...
### JavaWeb 学习笔记知识点总结 #### Spring Boot 和 Spring MVC 的区别 1. **Spring MVC**: - **定位**:Spring MVC 是 Spring 框架中的一个重要组成部分,主要用于构建 Web 应用程序。 - **作用**:提供了一...
这部分笔记可能会包括文件管理、进程控制、权限设置、管道与重定向、正则表达式等内容。通过学习Unix,开发者可以更高效地进行开发和调试工作。 2. **SQL note**: SQL(结构化查询语言)是用于管理关系型数据库的...
Linux学习笔记——入门资料 Linux,作为一款开源、免费的操作系统,因其稳定性和安全性而备受开发者和系统管理员的青睐。这份“Linux学习笔记”旨在帮助初学者快速掌握Linux的基础知识和操作技能,从而轻松入门。 ...
这是一本关于C语言的学习笔记,涵盖了从基本概念到高级应用的所有方面。下面是从中提取的重要知识点: 一、C语言概述 * C语言的历史和发展 * C语言的特点:结构化、模块化、可移植性、高效性 * C语言的应用领域:...
《成功之路Oracle11g学习笔记》是一本专为初学者设计的Oracle数据库学习资源,旨在帮助读者系统地掌握Oracle11g的基础知识。Oracle11g是Oracle公司推出的一个重要版本,它提供了许多增强的功能和优化,使得数据库...
本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM的各种运行时信息,包括但不限于JVM进程与参数查看、垃圾收集信息、JVM锁信息等内容。 #### 二、查看JVM进程及参数 ##### 1. JPS - **用途**:列出主机上...
【Linux学习笔记】这篇超全总结涵盖了Linux操作系统的基础知识,特别是关于命令行的使用和快捷键,以及一些桌面环境下的快捷操作。以下是笔记中的主要内容: 1. **LINUX常用操作命令**: - `clear`:清空终端屏幕...
软考中级网络工程师学习笔记 本资源摘要信息涵盖了软考中级网络工程师学习笔记的主要内容,包括电脑基础知识、操作系统、嵌入式系统、数据通信基础等方面。 一、电脑基础知识 1. 硬件系统:包括中央处理器(CPU)...
这篇学习笔记将深入探讨Java多线程的核心概念、实现方式以及相关工具的使用。 一、多线程基础 1. 线程与进程:在操作系统中,进程是资源分配的基本单位,而线程是程序执行的基本单位。每个进程至少有一个主线程,...