进程控制
进程的定义:
进程是一个程序的一次执行的过程,同时也是资源分配的最小单元
进程的特点:动态性、并发性、独立性、异步性
进程的状态:
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);
}
- 浏览: 249460 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (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 2374Makefile文件分析 # #(C)Copyri ... -
uboot start.S文件分析
2013-06-03 22:18 1286U-boot第一个开始文件arch\arm\cpu\arm1 ... -
u-boot mkconfig文件分析
2013-05-31 21:29 1109Mkconfig文件分析 #!/bin/ ... -
链接地址学习笔记
2013-05-05 12:40 1241链接地址 启动过程 示例代码如下: ... -
DDR学习笔记
2013-05-11 14:19 1001DDR 15条地址线32k 128M*2(20)=2(2 ... -
nand flash学习笔记一
2013-05-13 21:05 933Nandflash 原理图上有data0-data7 ... -
openJTAG学习笔记一
2013-05-22 21:45 2132安装软件 光盘Windows\install目录下的 01.O ... -
linux进程管理学习笔记
2013-03-28 20:57 1296linux 进程管理 1 linux进程控制 进程的四个要素: ... -
字符设备驱动程序学习笔记一
2013-04-01 21:55 828linux 驱动程序 字符设备驱动程序 网络接口驱动程序 块设 ... -
字符设备驱动程序学习笔记二
2013-04-04 10:29 716字符驱动程序 1 设备号 字符设备通过字符设备文件来存取 ls ... -
字符设备驱动程序学习笔记三
2013-04-04 14:03 730memdev.h文件示例代码如下: #ifndef _MEM ... -
字符设备驱动程序学习笔记四
2013-04-05 11:12 556竟争与互斥 程序调试 1 ... -
GPIO学习笔记
2013-04-14 19:50 771用汇编点亮一个led 1看原理图GPK4=0,led亮G ... -
系统时钟学习笔记
2013-05-04 21:59 80312m晶振----->pll------>cpu ... -
UART学习笔记
2013-05-04 22:00 1101串口(UART) DIV_VAL=(PCLK/(bpsx1 ... -
linux内存管理学习笔记
2013-03-12 20:50 10001 linux内存管理 地址类型 物理地址 出现在cpu地址 ... -
嵌入式linux系统学习笔记
2013-03-06 21:39 899嵌入式linux内核制作 1 清除原有配置文件与中间文件 x8 ... -
原理图学习笔记一
2013-02-17 22:24 370画个草图也挺过瘾 -
进程间通信学习笔记一(管道通信)
2013-02-01 20:08 1364进程间通信(ipc) 应用场景: 数据传输 资源共享 通知事件 ... -
进程间通信学习笔记二(信号通信)
2013-02-16 21:39 735信号通信 用户按某些键时,产生信号 硬件异常产生信号 进程用k ...
相关推荐
本人学习 Linux进程编程时整理的,介绍Linux进程的创建,到守护进程的创建步骤。还有有关进程控制的参考资料
SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注。 目录如下: 第一章 SV环境构建常识 1 1.1 数据类型 1 四、二值逻辑 4 定宽数组 9 foreach 13 动态数组 16 队列 19 ...
学习linux的笔记,发到博文了,鉴于文档方便保存和查阅,发出来,免费的哈 博文来自http://blog.csdn.net/wklken,共12篇,类似手册,可快速练习和查阅,容易上手 文档列表: Linux笔记——vim常用操作及扩展补充...
Linux学习笔记,主要包括:LINUX下寻求帮助,文件相关命令,系统命令初步,Linux编辑器的使用,进程控制等
3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。 答:public class MainClass { public static void Main() { Console.WriteLine(Foo(30)); } public static ...
4管理进程: 程序 静态的 进程 启动程序成了进程,每个进程都对应程序的唯一标识 线程 一个进程对应多个线程 5控制系统硬件和程序(驱动) 6管理守护进程 运行在后台,系统启动时启动,系统关闭时关闭 7管理...
第1章 BashShell命令 6 1.1 Shell提示符 6 1.2 文件与目录Shell命令 7 1.2.1 更改目录命令(cd) 7 1.2.2 列表命令(ls) 7 1.2.3 操作文件命令 10 1.2.4 目录处理命令 14 1.2.5 查看文件内容命令 15 1.3 监控程序 20 ...
oracle的服务=实例+数据库 实例=后台进程+sga(内存) 数据库=数据文件+控制文件+日志文件 .......
Log4j 是 Apache 的一个开放源代码项目,通过使用 Log4j ,我们可以控制日志信 送的目的地是控制台、文件、 GUI 组件、甚至是套接口服务器、 NT 的事件记录器、 X Syslog 守护进程等;我们也可以控制每一条日志的...
telnet是一个用来远程控制的程序,但是我们完全可以用这个程序来调试我们的服务端程 序的. 比如我们的服务器程序在监听 8888 端口,我们可以用 telnet localhost 8888来查 看服务端的状况. TCP(Transfer Control ...
-proc:{none,only} 控制是否执行注释处理和/或编译。 -processor <class1>[,,<class3>...] 要运行的注释处理程序的名称;绕过默认的搜索进程 -processorpath <路径> 指定查找注释处理程序的位置 -d <目录> 指定...
应用:科学计算、数据处理、自动控制、计算机辅助设计、人工智能、网络等领域。 硬件及冯诺依曼结构 计算机硬件 组成:CPU,主板,内存,电源,主机箱,硬盘,显卡,键盘、鼠标,显示器。 软件及软件开发 计算机软件...
C#学习 01_类.htm.txt 02_构造函数的执行序列.htm.txt 03_抽象类和接口.htm.txt 04_结构类型.htm.txt 05_类成员的定义.htm.txt 06_类成员的其他议题.htm.txt 07_接口的执行.htm.txt 08_集合.htm.txt 09_...
进程 资源分配的最小单位 线程 CPU调度的最小单位 线程的优势 (1)如果设计正确,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率 (2)建模简单:通过使用线程可以讲复杂并且...
Master节点负责整个集群的控制和管理,所有的控制命令都是发给它,上面运行着一组关键进程:kube-apiserver:提供了HTTPREST接口,是k8s所有资源增删改查等操作的唯一入口,也是集群控制的入口。 kube-contr
程序, 进程 ['prɒses] protected (关键字) 受保护的,私有的 [prә'tektid] provide v.规定(供应,准备,预防)[prә'vaid] refer to v.引用 [ri'fә:][tu:] reference n. 参考(引用,涉及)['refәrәns]' -->...
3)shadow ssdt学习笔记 4)高手进阶windows内核定时器之一 5)高手进阶windows内核定时器之二 6)运行期修改可执行文件的路径和Command Line 7)查找隐藏驱动 8)装载驱动的几种办法 9)内核中注入dll的一种...
主要内容包括多任务,调度和进程管理,物理内存的管理以及内核与相关硬件的交互,用户空间的进程如何访问虚拟内存,如何编写设备驱动程序,模块机制以及虚拟文件系统,Ext文件系统属性和访问控制表的
C#学习 01_类.htm.txt 02_构造函数的执行序列.htm.txt 03_抽象类和接口.htm.txt 04_结构类型.htm.txt 05_类成员的定义.htm.txt 06_类成员的其他议题.htm.txt 07_接口的执行.htm.txt 08_集合.htm.txt 09_...