- 1、本文档共46页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
10_进程
进程 1。Linux进程概述 2。进程创建 3。exec家族函数 4。system函数 5。进程的终止 6。特殊进程 1。Linux进程概述 进程定义: 进程就是一个程序执行的过程,它是一个动态的概念。 进程和程序的区别: 程序是指一段完成一定功能的代码,程序作为一个系统资源是永久存在的。它是静态的概念。 进程是程序从代码的第一句动态代码的执行到最后一句代码的过程。它是动态的概念。 比如,hello world程序。执行一次的过程叫进程。 如: #includestdio.h int main() { while(1) { printf(hello world!\n); sleep(1); } return 0; } //使用ps -e来查看当前正在运行进程。 //进程标识符,终端名称,进程执行时间,进程命令行输入 进程在内存中的组成: 代码段:存放了程序代码。 堆栈段:存放子程序的返回地址,参数,以及程序的局部 变量。 数据段:存放程序的全局变量,常量以及动态分配的数据 空间(如用malloc函数分配的空间)。 进程的特征: 动态性:进程是程序在数据集合上的一次执行过程,是动态的概念。同时,它还有生命周期,由创建而产生,由撤销而消亡。 独立性:进程既是系统中资源分配和保护的基本单位,也是系统调度的独立单位。每个进程都可以以各自独立的速度在CPU上进行。 同步性,异步性:指进程由于共享资源和协同合作时产生的相互制约关系,造成进程执行的间断性。即进程已各自独立的、不可预知的方向和速度向前推进,或者说,进程实体安异步方式执行。为此,系统必须提供某些设施,来保证进程间能协作操作和共享资源。 并发性:进程可以并发的执行。对于一个单处理器来说,m个进程是轮流占用处理器并发的执行。 2.进程的创建 在Linux系统中使用不同的进程号来标识不同的进程。进程号的英文是PID,PID是非零的正整数,进程号是程序在开始运行时Linux操作系统分配的。取得进程号的系统调用为getpid()。 设计一个程序,显示其进程的标示符PID 子进程创建函数 在Linux下,创建子进程的系统调用只有一个: fork函数 fork() #includestdio.h #includestdlib.h #includeunistd.h #includesys/types.h int main() { pid_t result; result = fork(); if (result == -1) { perror(创建进程失败!\n); } else if (result == 0) { while(1) { printf(这是子进程!\n); sleep(1); } } else { while(1) { printf(这是父进程!\n); sleep(2); } } return 0; } fork创建子进程的特点: 1.子进程复制了父进程的代码段,堆栈段和数据段。 2.父子进程之间不再共享任何数据。 3.返回值不同: 对于父进程,fork函数返回子进程的进程号,而对于子进程,则返回0 注意:在程序设计中,父进程和子进程都会执行后续的操作,那么,我们可以利用fork()函数在父子进程中的不同返回值,使用if...else...来实现让父子进程执行不同的功能。 取得父进程的ID号getppid() pid_t result; result = fork(); if (result == -1) { perror(创建进程失败!\n); } else if (result == 0) { //while(1) { printf(返回值是:%d,这是子进程!\n,result); printf(此进程的进程号是:%d\n,getpid()); printf(此进程的父进程的ID号是:%d\n,getppid()); sleep(1); } } else { //while(1) { printf(返回值是:%d,这是父进程!\n,result); printf(此进程的进程号是:%d\n,getpid()); printf(此进程的父进程的ID号是:%d\n,getppid()); printf(此进程的子进程的ID号是:%d\n,result); sleep(2); } } return 0; 父子进程使用内存不同范例 int main() { pid_t result; int i=10; result = fork
文档评论(0)