[计算机软件及应用]第4章Linux进程控制.pptVIP

[计算机软件及应用]第4章Linux进程控制.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[计算机软件及应用]第4章Linux进程控制

4.9 Linux进程 TASK_UNINTERRUPTIBLE (不可中断的等待状态) 除了不会因为接收到信号而被唤醒从而投入运行外,这个状态与可中断 等待状态相同。 TASK_ZOMBIE (僵死状态) 表示进程已经结束,但其父进程还没有调用wait()系统调用。子进程的进程描述符在此之前仍然被保留 4.10 Linux进程控制 Linux提供了许多系统调用对进程进行控制。如: 创建一个新进程fork函数; 重载进程映像exec系列函数; 进程等待wait函数,waitpid函数; 进程的自我终止exit函数; 获取进程标识号getpid函数; 获取父进程标识号getppid函数等。 编译并运行这个程序: $gcc fork_test.c -o fork_test $./fork_test PID before fork():1991 I am the parent process, my process ID is 1991 I am the child process, my process ID is 1992 再运行一遍,输出结果可能不同。请考虑一下为什么? else { /* 父进程程序*/ for ( i = 1; i 10; i ++ ) { sleep(1); printf(This is parent process\n); } } } 写时复制(copy on write) fork函数复制这两个段,只是“逻辑”上的,并非“物理”上的。也就是说,实际执行fork时,物理空间上两个进程的数据段和堆栈段都还是共享着的,当有一个进程写了某个数据时,这时两个进程之间的数据才有了区别,系统就将有区别的“页”从物理上也分开。系统在空间上的开销就可以达到最小。这就是写时复制。 格式: void exit ( int status ) 功能:进程终止,具体完成下例工作: 将进程置僵死状态 释放其所占有的资源 向父进程发本进程死信号,并发送信息status给父进程,将自己及自己的子进程运行CPU的时间总和留待父进程使用wait( )回收。 返回值:无 头文件: #include stdlib.h else { //父进程等待子进程 wait(0); return 0; } } 与一般情况不同,exec函数族的函数执行成功后不会返回,因为调用进程的实体,包括代码段,数据段和堆栈等都已经被新的内容取代,只留下进程ID等一些表面上的信息仍保持原样。只有调用失败了,它们才会返回一个-1,从原程序的调用点接着往下执行。 execl()、execle()、execlp():程序参数直接出现在系统调用实参中 格式:execl(char *file, char *arg, …) 例如:execl(“/bin/ls”,”ls”,”-al”,(char *)0); execlp(ls, ls, -al, /etc/passwd,(char *)0); Linux进程的定义 Linux进程描述符 Linux状态转换 Linux进程控制 例4 int main(void) { pid_t pid; pid =fork(); if (pid0) exit(0); else if (pid == 0) { //如果是子进程 睡眠20秒 printf(children : %d \r\n,getpid()); sleep(20); return 0; } 4 .exec系统调用 说是exec系统调用,实际上在Linux中,并不存在一个exec()的函数形式,exec指的是一个函数簇,一共有6个,分别是: #include unistd.h int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const char *arg, ..., char *const envp[]); int execv(const char *path, char *const argv[]); int execvp(const char *file, char *const argv[]); int execve(const char *path, char *const argv[], char *const envp[]); exec函数族的作用是根

您可能关注的文档

文档评论(0)

qiwqpu54 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档