Linux的进程管理(一).ppt

  1. 1、本文档共51页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux的进程管理(一)课件

它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了。另外,这里的可执行文件既可以是二进制文件,也可以是Linux下任何可执行的脚本文件。 在Linux中使用exec函数族主要有两种情况: ? 当进程认为自己不能再为系统和用户做出任何贡献时,就可以调用exec函数族中的任意一个函数让自己重生; ? 如果一个进程想执行另一个程序,那么它就可以调用fork()函数新建一个进程,然后调用exec函数族中的任意一个函数,这样看起来就像通过执行应用程序而产生了一个新进程(这种情况非常普遍)。 exec函数的例子2 如果还想保留父进程怎么办?? #include unistd.h int main(int argc, char *argv[]) { if(fork()==0) {   if(execl(/bin/echo, echo, executed by execl, NULL)0)   perror(Err on execl);   } // 父进程做其他事情 return 0; } exec函数族 exec函数族使用区别 exec函数族使用区别 查找方式 表中的前四个函数的查找方式都是完整的文件目录路径,而最后两个函数(以p结尾的函数)可以只给出文件名,系统就会自动从环境变量“$PATH”所指出的路径中进行查找。 参数传递方式 两种方式:逐个列举、将所有参数整体构造指针数组传递 以函数名的第五位字母来区分的,字母为“l”(list)的表示逐个列举的方式,其语法为char *arg;字母为“v”(vertor)的表示将所有参数整体构造指针数组传递,其语法为*const argv[] 环境变量 exec函数族可以默认系统的环境变量,也可以传入指定的环境变量。这里,以“e”(Enviromen)结尾的两个函数execle、execve就可以在envp[]中指定当前进程所使用的环境变量 exec与fork配合使用的效率问题 在Unix时代exec经常与fork配合使用,但这样做了大量的无用功,效率低下(为什么?)。 为了解决该问题,在Unix时代创建了vfork函数与exec配合。vfork函数不复制父进程的资源,而是共享父进程资源,直到碰到exec函数才开始复制父进程的部分资源(不包括进程地址空间)。 在Linux时代,fork函数实现中引入了“写时拷贝Copy On Write”技术,fork+exec的配合效率也很高。 Linux时代,vfork几乎没有存在的必要,只被用在极少数场合。 vfork函数 vfork() 其功能类似于fork(),但是有以下两点显著的不同: vfork()不同于fork() ,它没有复制自己的进程地址空间,而是共享父进程的,所以,子进程的改变也会引起父进程的改变 vfork()创建后子进程总是立即优先于父进程执行的 ,在子进程exec或者exit后,才会执行父进程。 vfork()函数语法: pid_t vfork (void); clone函数 int clone(int (*fn)(void *), void *child_stack, int flags, void *arg); clone可以让你有选择性的继承父进程的资源,你可以选择想vfork一样和父进程共享一个虚存空间,从而使创造的是线程,你也可以不和父进程共享,你甚至可以选择创造出来的进程和父进程不再是父子关系,而是兄弟关系。 clone还可以为新进程指定EIP的值(令EIP指向fn指向的函数) fork的子进程和父进程不共享任何资源。 Vfork = clone(EIP, ESP, CLONE_VFORK|CLONE_VM, 0); clone函数 CLONE_PARENT 创建的子进程的父进程是调用者的父进程,新进程与创建它的进程成了“兄弟”而不是“父子” CLONE_FS 子进程与父进程共享相同的文件系统,包括root、当前目录、umask CLONE_FILES 子进程与父进程共享相同的文件描述符(file descriptor)表 CLONE_NEWNS 在新的namespace启动子进程,namespace描述了进程的文件hierarchy CLONE_SIGHAND 子进程与父进程共享相同的信号处理(signal handler)表 CLONE_PTRACE 若父进程被trace,子进程也被trace CLONE_VFORK 父进程被挂起,直至子进程释放虚拟内存资源 CLONE

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档