《计算机操作系统操作系统 (9).pdf》由会员分享,可在线阅读,更多相关《计算机操作系统操作系统 (9).pdf(14页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第三章 进程(二)进程操作进程创建父进程父进程创建子进程子进程,如此轮流创建进程下去,构成一棵进程树资源共享父进程子进程共享所有的资源子进程共享父进程资源的子集父进程和子进程无资源共享执行父进程和子进程并发执行父进程等待,直到子进程终止进程创建地址空间子女复制双亲子女有一个程序被调入UNIX例子fork 系统调用创建新进程在fork 用一个新程序替代了进程的内存空间之后,采用exec系统调用原子操作原子操作原子操作(Atomic Operation)不会被打断的操作一旦开始就一直运行到结束,中间不会有任何上下文切换进程创建是原子操作原子性必须需要硬件的支持X86:CPU在在指令执行期间对指令执
2、行期间对总线加锁的手段CPU引线#HLOCK pin进程终止进程执行最后一项并退出(exit)从子进程向父进程输出数据(通过wait)操作系统收回进程的资源父进程可中止子进程的执行(abort)子进程超量分配资源赋予子进程的任务不再需要如果父进程结束若父进程终止,一些系统不允许子进程继续存在所有子进程终止-级联终止级联终止父进程可以等子进程结束调用wait()系统调用Windows进程操作CreateProcess:进程创建新进程可以继承:打开文件的句柄、各种对象(如进程、线程、信号量、管道等)的句柄、环境变量、当前目录、原进程的控制终端、原进程的进程组(用于发送Ctrl+C或Ctrl+Bre
3、ak信号给多个进程)每个句柄在创建或打开时能指定是否可继承新进程不能继承:优先权类、内存句柄、DLL模块句柄ExitProcess和TerminateProcess:进程退出WaitForSingleObject:等待子进程结束结束进程如果某个如果某个process想自己停止执行,想自己停止执行,可调用可调用ExitProcess()C程序库中的程序库中的exit(),exit()在自动执行一些清除垃圾工作在自动执行一些清除垃圾工作后,后,再调用再调用ExitProcess()VOID ExitProcess(UNT uExitCode)如果如果process A 想要想要process B
4、停止执行,停止执行,可在取得可在取得process B 的的handle 后,后,调用调用TerminateProcess():BOOL TerminateProcess(HANDLE hProcess,UNIT uExitCode)Linux进程创建fork 函数:#include pid_t fork();当一个进程调用fork 后会创建一个子进程这个子进程和父进程不同:进程ID写时复制技术父进程和子进程区分父进程和子进程:跟踪fork返回值失败:-1否则父进程fork 返回子进程的IDfork 子进程返回0可根据这个返回值来区分父子进程执行其它程序exec 族调用有着6个函数:等待父进程阻塞直到子进程完成任务调用wait 或者waitpid 系统调用#include#include pid_t wait(int*stat_loc);pid_t waitpid(pid_t pid,int*stat_loc,int options);例子创建进程过程