进程控制课件

上传人:2127513****773577... 文档编号:241552276 上传时间:2024-07-03 格式:PPT 页数:38 大小:173.71KB
返回 下载 相关 举报
进程控制课件_第1页
第1页 / 共38页
进程控制课件_第2页
第2页 / 共38页
进程控制课件_第3页
第3页 / 共38页
点击查看更多>>
资源描述
进进程控制程控制进进程控制理程控制理论论基基础础进进程控制程控制编编程程.进程控制进程控制理论基础.1定定义义 进进程是一个具有一定独立功能的程序的程是一个具有一定独立功能的程序的一次运行活一次运行活动动。.定义 进程是一个具有一定独立功能的程序的一次运行2特点特点动态动态性性并并发发性性独立性独立性异步性异步性.特点动态性.3状状态态.状态.4进进程程ID进进程程ID(PID):标识进标识进程的唯一数字程的唯一数字父父进进程的程的ID(PPID)启启动进动进程的用程的用户户ID(UID).进程ID进程ID(PID):标识进程的唯一数字.5进进程互斥程互斥进进程互斥是指当有若干程互斥是指当有若干进进程都要使用某程都要使用某一共享一共享资资源源时时,任何,任何时时刻最多允刻最多允许许一个一个进进程使用,其他要使用程使用,其他要使用该资该资源的源的进进程必程必须须等待,直到占用等待,直到占用该资该资源者源者释释放了放了该资该资源源为为止。止。.进程互斥进程互斥是指当有若干进程都要使用某.6临临界界资资源源 操作系操作系统统中将一次只允中将一次只允许许一个一个进进程程访问访问的的资资源称源称为临为临界界资资源。源。.临界资源 操作系统中将一次只允许一个进程访问的资源称7临临界区界区进进程中程中访问临访问临界界资资源的源的那段程序代那段程序代码码称称为临为临界区。界区。为实现对临为实现对临界界资资源的互斥源的互斥访访问问,应应保保证诸进证诸进程互斥地程互斥地进进入各自的入各自的临临界区。界区。.临界区进程中访问临界资源的那段程序代码称.8进进程同步程同步 一一组组并并发进发进程按程按一定的一定的顺顺序序执执行的行的过过程程称称为进为进程程间间的同步。具有同步关系的一的同步。具有同步关系的一组组并并发进发进程称程称为为合作合作进进程,合作程,合作进进程程间间互相互相发发送的信号称送的信号称为为消息或事件。消息或事件。.进程同步 一组并发进程按一定的顺序执行的过程称为进程9进进程程调调度度概念:概念:按一定算法,从一按一定算法,从一组组待运行的待运行的进进程中程中选选出出一个来占有一个来占有CPU运行。运行。调调度方式:度方式:抢抢占式占式非非抢抢占式占式.进程调度概念:.10调调度算法度算法先来先服先来先服务调务调度算法度算法短短进进程程优优先先调调度算法度算法高高优优先先级优级优先先调调度算法度算法时间时间片片轮转轮转法法.调度算法先来先服务调度算法.11死死锁锁 多个多个进进程因程因竞竞争争资资源而形成一种僵局,源而形成一种僵局,若无外力作用,若无外力作用,这这些些进进程都将永程都将永远远不能再不能再向前推向前推进进。.死锁 多个进程因竞争资源而形成一种僵局,若无外力作用,12获获取取ID#include#includepid_t getpid(void)获获取本取本进进程程ID。pid_t getppid(void)获获取父取父进进程程ID。.获取ID#include.13获获取取ID#include#include#includeint main(void)printf(PID=%dn,getpid();printf(PPID=%dn,getppid();return 0;.获取ID#include.14进进程程创创建建#includepid_t fork(void)功能:功能:创创建子建子进进程程fork的奇妙之的奇妙之处处在于它被在于它被调调用一用一次,却返回两次,它可能有三种不同的返回次,却返回两次,它可能有三种不同的返回值值:1.在父在父进进程中,程中,fork返回新返回新创创建的子建的子进进程的程的PID;2.在子在子进进程中,程中,fork返回返回0;3.如果出如果出现错误现错误,fork返回一个返回一个负值负值.进程创建#include.15进进程程创创建建#include#inlcudemain()pid_t pid;/*此此时仅时仅有一个有一个进进程程*/pid=fork();/*此此时时已已经经有两个有两个进进程在同程在同时时运行运行*/if(pid0)printf(error in fork!);else if(pid=0)printf(I am the child process,ID is%dn,getpid();elseprintf(I am the parent process,ID is%dn,getpid();?执执行后的行后的结结果?果?.进程创建#include.16进进程程创创建建$./fork_testI am the parent process,my process ID is 1991I am the child process,my process ID is 1992 在在pid=fork()之前,只有一个之前,只有一个进进程在程在执执行,但在行,但在这这条条语语句句执执行之后,就行之后,就变变成两个成两个进进程在程在执执行了,行了,这这两个两个进进程的程的代代码码部分完全相同,部分完全相同,将要将要执执行的下一条行的下一条语语句都是句都是f(pid=0)。两个。两个进进程中,原先就存在的那个程中,原先就存在的那个进进程被称作程被称作“父父进进程程”,新出,新出现现的那个的那个进进程被称作程被称作“子子进进程程”,父子父子进进程的区程的区别别在于在于进进程程标识标识符(符(PID)不同。)不同。.进程创建$./fork_test.17进进程程创创建建思考运行思考运行结结果?果?#include#includeint main(void)pid_t pid;int count=0;count+;pid=fork();printf(This is first time,pid=%dn,pid);printf(This is second time,pid=%dn,pid);count+;printf(count=%dn,count);if(pid0)printf(This is parent process,the child has the pid:%dn,pid);else if(!pid)printf(This is the child process.n);elseprintf(fork failed.n);printf(This is third time,pid=%dn,pid);printf(This is fouth time,pid=%dn,pid);return 0;.进程创建思考运行结果?#include18进进程程创创建建思考运行思考运行结结果?果?父父进进程的数据空程的数据空间间、堆、堆栈栈空空间间都会都会给给子子进进程一个拷程一个拷贝贝,而不是共享,而不是共享这这些内存。在子些内存。在子进进程中程中对对count进进行自加行自加1的操作,但是并的操作,但是并没有影响到父没有影响到父进进程中的程中的count值值,父,父进进程程中的中的count值值仍然仍然为为0。.进程创建思考运行结果?父进程的数据空间、堆栈空间都会给子进19进进程程创创建建#include#includepid_t vfork(void)功能:功能:创创建子建子进进程。程。.进程创建#include.20创创建建进进程程区区别别:1.fork要拷要拷贝贝父父进进程的数据段;而程的数据段;而vfork则则不需要完全拷不需要完全拷贝贝父父进进程的数据段,子程的数据段,子进进程程与父与父进进程共享数据段。程共享数据段。2.fork不不对对父子父子进进程的程的执执行次序行次序进进行任何限行任何限制;而在制;而在vfork调调用中,子用中,子进进程先运行,程先运行,父父进进程挂起。程挂起。.创建进程区别:.21进进程程创创建建1.#include2.#include3.#include4.main()5.int count=1;6.int child;7.8.printf(“Before create son,the fathers count is:%dn”,count);9.if(!(child=vfork()10.11.printf(This is son,his pid is:%d and the count is:%dn,getpid(),+count);12.exit(1);13.else14.printf(After son,This is father,his pid is:%d and the count is:%d,and the child is:%dn,getpid(),count,child);15.16.进程创建#include.22执执行程序行程序exec用用被被执执行的程序行的程序替替换换调调用它的程序用它的程序。区区别别:fork创创建一个新的建一个新的进进程,程,产产生一个新的生一个新的PID。exec启启动动一个新程序,替一个新程序,替换换原有的原有的进进程,程,因此因此进进程的程的PID不会改不会改变变,和,和调调用用exec函函数的数的进进程一程一样样。.执行程序exec用被执行的程序替换调用它的程序。.23执执行程序行程序#includeint execl(const char*path,const char*arg,.)功能:功能:运行参数运行参数path所指定的可所指定的可执执行文件,接下行文件,接下来的参数代表来的参数代表执执行行该该文件文件时传递过时传递过去的去的argv0、argv1,最后一个参数必,最后一个参数必须须用空指用空指针针(NULL)作作结结束。束。.执行程序#include.24执执行程序行程序#includemain()execl(“/bin/ls”,”ls”,”-al”,”/etc/passwd”,(char*)0);.执行程序#include.25执执行程序行程序#includeint execlp(const char*file,const char*arg,)功能:功能:从从PATH环环境境变变量所指的目量所指的目录录中中查查找符合参数找符合参数file的文件名,找到后便的文件名,找到后便执执行行该该文件,然后将文件,然后将第二个以后的参数当做第二个以后的参数当做该该文件的文件的argv0、argv1,最后一个参数必,最后一个参数必须须用空指用空指针针(NULL)作作结结束。束。.执行程序#include.26执执行程序行程序#includemain()execlp(”ls”,”ls”,”-al”,”/etc/passwd”,(char*)0);.执行程序#include.27执执行程序行程序#includeint execv(const char*path,char*const argv)功能:功能:执执行参数行参数path所指定的文件,与所指定的文件,与execl()不同的不同的地方在于地方在于execve()只需两个参数,第二个参数只需两个参数,第二个参数利用数利用数组组指指针针来来传递给执传递给执行文件。行文件。.执行程序#include.28执执行程序行程序#includemain()char*argv=“ls”,”-al”,”/etc/passwd”,(char*)0;execv(“/bin/ls”,argv);.执行程序#include.29执执行程序行程序#includeint system(const char*string)功能:功能:调调用用fork()产产生子生子进进程,由子程,由子进进程来程来调调用用/bin/sh-c string来来执执行参数行参数string字符串字符串所代表的命令。所代表的命令。.执行程序#include.30执执行程序行程序includemain()system(“ls-al/etc/passwd /etc/shadow”);.执行程序include.31等待等待#include#includepid_t wait(int*status)功能:功能:进进程一旦程一旦调调用了用了wait,就立即阻塞自己,直到自,就立即阻塞自己,直到自己的己的某个某个子子进进程退出,如果没有找到程退出,如果没有找到这样这样一个子一个子进进程,程,wait就会一直阻塞在就会一直阻塞在这这里,直到有一个出里,直到有一个出现为现为止。止。.等待#include.32等待等待#include#include#include#includemain()pid_t pc,pr;pc=fork();if(pc0)/*如果出如果出错错*/printf(error ocurred!n);else if(pc=0)/*如果是子如果是子进进程程*/printf(This is child process with pid of%dn,getpid();sleep(10);/*睡眠睡眠10秒秒钟钟*/else/*如果是父如果是父进进程程*/pr=wait(NULL);/*在在这这里等待里等待*/printf(I catched a child process with pid of%dn),pr);exit(0);.等待#include.33等待等待#include#includepid_t waitpid(pid_t pid,int*status,int options)功能:功能:进进程一旦程一旦调调用了用了wait,就立即阻塞自己,直到自,就立即阻塞自己,直到自己的己的某个某个子子进进程退出,如果没有找到程退出,如果没有找到这样这样一个子一个子进进程,程,wait就会一直阻塞在就会一直阻塞在这这里,直到有一个出里,直到有一个出现为现为止。止。.等待#include.34等待等待当当pid取不同的取不同的值时值时,有不同的意,有不同的意义义:1.pid0时时,只等待,只等待进进程程ID等于等于pid的子的子进进程,不管其它已程,不管其它已经经有多少子有多少子进进程运行程运行结结束退出了,只要指定的子束退出了,只要指定的子进进程程还还没有没有结结束,束,waitpid就会一直等下去。就会一直等下去。2.pid=-1时时,等待任何一个子,等待任何一个子进进程退出,没有任何限制,程退出,没有任何限制,此此时时waitpid和和wait的作用一模一的作用一模一样样。3.pid=0时时,等待同一个,等待同一个进进程程组组中的任何子中的任何子进进程。程。4.pid-1时时,等待一个指定,等待一个指定进进程程组组中的任何子中的任何子进进程,程,这这个个进进程程组组的的ID等于等于pid的的绝对值绝对值。.等待当pid取不同的值时,有不同的意义:.35等待等待参数参数option可以可以为为0或下面的或下面的OR组组合合:WNOHANG:如果没有任何已如果没有任何已经结经结束的子束的子进进程程则马则马上返上返回回,不予以等待。不予以等待。WUNTRACED:如果子如果子进进程程进进入入暂暂停停执执行情况行情况则马则马上返回。上返回。.等待参数option可以为0或下面的OR组合:.36发发送信号送信号#include#includeint kill(pid_t pid,int sig)功能:功能:发发送参数送参数sig指定的信号指定的信号给给参数参数pid指定的指定的进进程程pid0将信号将信号传给进传给进程程识别码为识别码为pid的的进进程程pid=0将信号将信号传给传给和目前和目前进进程相同程相同进进程程组组的所有的所有进进程程pid=-1将信号广播将信号广播传传送送给给系系统统内所有的内所有的进进程程pid0将信号将信号传给进传给进程程组识别码为组识别码为pid绝对值绝对值的所有的所有进进程程.发送信号#include.37退出退出exit和和_exit用于中止用于中止进进程程:_exit的作用:直接使的作用:直接使进进程停止运行,清除其程停止运行,清除其使用的内存空使用的内存空间间,并清除其在内核中的数据,并清除其在内核中的数据结结构。构。exit与与_exit函数不同,使函数不同,使进进程停止运行之前要程停止运行之前要检查检查文件打开情况,并把文件文件打开情况,并把文件缓缓冲区的内容写冲区的内容写回文件中去之后才停止回文件中去之后才停止进进程。程。.退出exit和_exit用于中止进程:.38
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!