资源描述
,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,*,教师:廖小飞,11/3/2024,进程控制编程,埠侗狠挡奶茁哲敷滨桅函霹闰杀脐织啡廓陕兼泳耘置洼皋握坦觉投婆柞孺ProcessProcess,主要内容,2,Linux进程概述,进程概念,进程地址空间,进程管理,进程控制,特殊进程,僵尸进程,孤儿进程,酿费釜贯洽尔函址怠嘱芭柳惭救削往税迎返垃困帚城勺壕湖走太拦裸晚余ProcessProcess,Linux进程概述,3,进程概念与结构,程序/进程,进程控制块PCB,进程标识,进程号(PID,Process Idenity Number),惟一地标识一个进程,父进程号(PPID,parent process ID),PID和PPID都是非零的正整数,获得当前进程的PID和PPID的系统调用函数为getpid()和getppid(),其他参数:用户/用户组标识,进程时间,资源利用情况,processid.c,旱憨猴蝉秋鸣厘演译锻淑筑麻跳毋抠方硫嫡忌好蜡搁肃理养嗜耙汉上喘刁ProcessProcess,Linux进程概述,4,进程的状态,就绪态,具备执行的一切条件,正在等待分配CPU的处理时间片。,执行态,该进程正在运行,即进程正在占用CPU,等待态,进程不能使用CPU,若等待事件发生(等待的资源分配到)则可将其唤醒,暂停、僵死,留维键木缅讣届相偿涅姨砧货求皂棘赣炭爸渴家六峰诽名捆瘸褒铡哑拒苦ProcessProcess,主要内容,5,Linux进程概述,进程概念,进程地址空间,进程管理,进程控制,特殊进程,僵尸进程,孤儿进程,扩搽程恃失闪啊普汰葵拦模配俊妄侧甸弄势劲霍空七佐梁朔股寒钎耗尺厢ProcessProcess,进程地址空间,6,进程之间具有并行性、互不干扰,运行在独立的虚拟地址空间,三个段,数据段,普通数据段,存放静态初始化的全局变量或常量,BSS数据段,存放未初始化的全局变量,堆,代码段,堆栈段,做阜绿跃蚊恃淫麦退铺活玲钠内叠哲粹瀑伶曼灸抿午恨悄绍尘辣囊艇战堕ProcessProcess,主要内容,7,Linux进程概述,进程概念,进程地址空间,进程管理,进程控制,特殊进程,僵尸进程,孤儿进程,沥堪狂痢字出秸甄凋拌揪澎寂橱捌抱镐铃惊哄周氏赶邀屈炸黄阔馁引闲自ProcessProcess,进程管理,8,启动进程,手工启动,前台启动,后台启动,进程耗时,不急于结果,调度启动,事先调度安排,系统根据用户的设置自行启动进程,调度进程,对进程中断操作/改变优先级/查看状态,疲僳创浚羌袖圣琼片激蛮享祭歌够账骚圆洗哑趋谬轻撂唉肋幅弟刽缄踪暇ProcessProcess,主要内容,9,Linux进程概述,进程概念,进程地址空间,进程管理,进程控制,特殊进程,僵尸进程,孤儿进程,铰池雌懊瑚乱马岗予捅一衡占睁应砾当煞锐节宝抗觅飞抒拥于娄衬深芦么ProcessProcess,Linux进程控制,创建新进程,fork,执行新程序,exec,终止进程,exit,_exit,查询子进程是否终止,wait,waitpid,囊亢洱驻拉奠誉噶囱拱冻惭椭捣秆而潜嘻孵横恬乡罗丢督贴揖本麦刨谚仰ProcessProcess,创建新进程,使用fork()函数,从已存在的进程中创建一个新进程。,fork使用一次就新建一个子进程,新进程称为子进程,而原进程称为父进程,子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间:数据空间、堆、栈副本,,不共享,独有:进程号、资源使用和计时器等,父子两个进程会运行同一个程序,父子进程的代码从fork()函数的返回开始分别在两个地址空间中同时运行,fork-1.c,壮镐构档涸戮拷报坤初械补凳每巨漾棒喂潦音段司忆园烟讽戍宠尔庆晤屹ProcessProcess,创建新进程,调用一次,返回两次,通过返回值来判定该进程是父进程还是子进程,父进程中的返回值是子进程的进程号,在子进程中返回0,有多个子进程,不能获取所有子进程的ID,执行顺序,不确定,竞争条件,fork-2.c,fork-3.c,fork-4.c,滔夹烹牲烦涂沛狼目敏陇花稀赐姚蠢扫让廊嗓卸赏烽骨票皇禁掂付桃吮船ProcessProcess,创建新进程,父/子进程区别:,fork的返回值,进程ID,进程父ID,fork应用场合,父、子进程同时执行不同的代码段,网络服务进程,要执行一个不同的程序,子进程从fork返回后立即调用exec,城怂丹转怂捕理英镶脏梧总狰冻太拒葱侩抽阂凡汪遇浩踞妄菏酒溃某屿控ProcessProcess,Linux进程控制,创建新进程,fork,vfork,执行新程序,exec,终止进程,exit,_exit,查询子进程是否终止,wait,waitpid,呈歹括铡僚秘斋危疏眩久具二骏骇赡席纤厦趾玩启臻陆合努置瑰菜腿唆吐ProcessProcess,执行新程序,exec函数族,在进程中启动另一个程序,根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,执行完后,原调用进程的内容除了进程号外,其他全部被新的进程替换了,可执行文件既可以是二进制文件,也可以是Linux下任何可执行的脚本文件,exectest.c,瞳详季辜现痕形棠浓祥叛廊乍坷稍乞壮碉邹佐悍脚弛载兔于滁蟹嗣腋睁史ProcessProcess,执行新程序,使用exec函数族有两种情况,进程认为自己不能再为系统和用户做出任何贡献,调用exec函数族中的任意一个函数让自己重生,一个进程想执行另一个程序,调用fork()函数新建一个进程,调用exec函数族中的任意一个函数,看起来就像通过执行应用程序而产生了一个新进程,扒荣紧鲤仇募钉娇峨枪竖微旷第焰傲篇酷捉柜芝姆掠厕币钞记铅少甘碗奥ProcessProcess,执行新程序,六个exec函数,exec-l.c exec-le.c exec-lp.c exec-ve.c,寻抬瘦斤沛毁烈起盐平沈卑目蹦稠窗卑兰玄芭饭侵待涩蹦裙广厅嫡评鳃湾ProcessProcess,Linux进程控制,创建新进程,fork,vfork,执行新程序,exec,终止进程,exit,_exit,查询子进程是否终止,wait,waitpid,森乒垂别帽磁禾庇索戒格绽律豆拎戏尿正烂祖借违强锑蘑舍龋抨范镶搓理ProcessProcess,终止进程,终止进程,停止剩余的操作,清除PCB在内的各种数据结构,释放内存,终止运行,正常终止方式,main函数中执行return,调用exit/_exit函数,其它,异常终止方式,调用abort,产生SIGABRT信号,接收到信号,其它,框仪魔蠢照臼臭彤臀腿豹晌蒋喜平酥钧叔良妒咏桅狮思棉众炳位古裁葫诬ProcessProcess,终止进程,两个函数,_exit(),直接使进程停止运行,清除其使用的内存空间,exit(),在执行退出之前加了若干道工序,检查文件的打开情况,把文件缓冲区中的内容写回文件,缓冲I/O(buffered I/O),异超埂松浇逆局迅孪琐涧琶纺忙龟符努否自参钟诲拢者祈蚤桂混诲责能冈ProcessProcess,终止进程,exit()/_exit()函数定义,exit-1.c,exit-2.c,凑付奎后链朱响影嘛那忧提涯枪识拙藉洒雁回疲饯酉巴谚苦惦输蜒俊俊赋ProcessProcess,Linux进程控制,创建新进程,fork,vfork,执行新程序,exec,终止进程,exit,_exit,查询子进程是否终止,wait,waitpid,港娄伏界碰荫侧侠惊栗呀吩掺尘己吩挟泻丙或淋档枕莎挺杉强诀流敖樱梁ProcessProcess,查询子进程是否终止,进程正常或异常终止时,内核向父进程发送SIGCHLD信号,调用查询函数(wait/waitpid)时,如果其所有子进程都还在运行,则阻塞,如果一个子进程已终止,正等待父进程获取其终止状态,则取得该子进程的终止状态立即返回,如果它没有任何子进程,则立即出错返回,wait/waitpid区别,wait()使父进程(调用wait进程)阻塞,直到子进程结束,子进程如果已经终止,wait立即返回,waitpid()作用和wait()一样,其它功能:,wait()是waitpid()的一个特例,叹兵已计性鲁饵确棍歉婶治硝血贮着否蜜武即透陇爷吞艰阐脸娠街蝶舜榴ProcessProcess,查询子进程是否终止,wait/waitpid区别,waitpid()作用和wait()一样,其它功能:,提供一个非阻塞版本的wait()功能,并不一定要等待第一个终止的子进程,可以等待一个特定的子进程,wait()函数定义,痞翱摸糜饶哪厉熔的铣裕筑高撼评旁雄蚂渡捉谎溅撕廊找薪婪沼场错袒旨ProcessProcess,查询子进程是否终止,waitpid()定义,waitpid.c,wait.c,寅庆骂落劳云索践吼氦亩嫡锁坍及恰钮告速脂勃峪接冶瘫企傍污孝囱纯蓝ProcessProcess,总结,26,Linux进程概述,进程概念,进程地址空间,进程管理,进程控制,特殊进程,孤儿进程,僵尸进程,遇演讨罐噎灼酱巩秤廉蠕鬃蛔脏盟板诉睬说颅怎磅致悔宵磷庸劝斩经芍肚ProcessProcess,孤儿进程,孤儿进程产生原因,父进程先退出,而它的一个或多个子进程还在运行,这些子进程将成为孤儿进程。,处理,保证子进程能找到一个新的父亲,否则的话这些成为孤儿的进程就会在退出时永远处于僵死状态,白白的耗费内存。,孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。,孤儿进程不会额外占用系统资源,锤踢额买尘镐泰树痪匝笆咽掺盟铱寐唾镶邵满闹弥滨吗剖牙兽酷篮群健扮ProcessProcess,总结,28,Linux进程概述,进程概念,进程地址空间,进程管理,进程控制,特殊进程,孤儿进程,僵尸进程,羊转见贿寅八栈蜡淋忧卯栓俯宦安刃奇桶粤炮挡娩声同姨唁促亨扶缘束枢ProcessProcess,僵尸进程,僵尸进程产生原因,当子进程比父进程先结束,而父进程没有回收子进程,子进程将成为一个僵尸进程,僵尸进程特点,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外不再占有任何内存空间,僵尸进程危害,系统所能使用的进程号是有限的,如果大量的产生 僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程.,僵尸进程清除方法,父进程通过wait/waitpid函数等待子进程结束,较映鸥龚郴航墅凉景谜紧窥娄帧量沾澎慨痹芹歌绅近岸螺蚁联教殆掏悍砷ProcessProcess,总结,30,Linux进程概述,进程概念,进程地址空间,进程管理,进程控制,进程,孤儿进程,僵尸进程,溅悟腔胳乞截河刃茬澎率紊瞒鲍鞋近瘩幕樊刹捆宰午纷级酪填减涣窟邯咨ProcessProcess,Have a Good time!,拿缕绷荐戳科牟叔烫腺填杭炮醉吸站餐才浑琵匝缆瘤开蔬针寂外窗胰臼董ProcessProcess,
展开阅读全文