进程和线程。.ppt

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

进程编程 ? exit函数与_exit函数 exit函数作为c标准库的一部分。使程序正常终止并且返回父进程 状态。 #include stdlib.h int exit(int status); #include unistd.h int _exit(status); * 进程编程 ? abort函数 异常终止一个程序 #include stdlib.h #include stdlib.h #include stdio.h void abort(void); int main(void) { abort(); exit(EXIT_SUCCESS); } * 进程编程 ? kill函数 一个进程可以用kill函数杀死另一个进程 #include signal.h #include sys/types.h int kill(pid_t pid, int sig); pid指定了要杀死的进程,sig是要发送的信号 * 进程编程 ? 例程:kill函数 #include sys/types.h #include sys/wait.h #include signal.h #include stdlib.h #include stdio.h int main(void) { pid_t child; int status, retval; if((child = fork()) 0) { perror(“fork”); exit(EXIT_FAILURE); } if (child == 0) { sleep(1000); exit(EXIT_SUCCESS); } else { if ((waitpid(child, status, WNOHANG)) == 0) {retval = kill(child, SIGKILL); if(retval) { puts(“kill failed\n”); perror(“kill”); waitpid(child, status, 0); } else printf(“%d killed\n”, child); } } exit(EXIT_SUCCESS); } * 进程编程小结 * 通过fork()来创建进程确实很有用,但是必须密切注意子进程的执行情况。 当一个子进程结束运行的时候,它与其父进程之间的关联还会保持到父进程也正常地结束运行或者父进程调用了wait()才告终止。因此子进程的PCB是不会立刻释放的,虽然不再活跃,可子进程还停留在系统里,因为它的退出码还需要保存起来以备父进程中后续的wait()调用使用,它将成为一个僵尸进程。 接下去,如果父进程非正常地结束了,子进程就会自动把PID值为1的进程即init()当做自己的父进程,这样这个僵尸进程将保留在进程表里,直到被init()发现并处理掉,释放PCB等。 因此,应尽量避免僵尸进程,因为在init()发现它之前会一直耗着系统资源。 进程编程小结 1.子进程在其父进程没有调用wait的情况下退出。 2.父进程退出,而它的一个或多个子进程还在运行。 ? ? 第一种情况,退出的进程会被置于一个中间状态下,变成一个 僵尸进程(其状态描述为僵死状态),占据内核维护的进程控 制表中的一项,但不会使用其他的资源。如果它的父进程通过 wait声明等待它,它将最终被清除。然后父进程可以读取退出 的状态,且它占据的表项可以被重用。 第二种情况,父进程正常退出,它的子进程包括僵尸进程将会 被init进程采用(init进程为linux系统下的首个进程)。 * 进程编程 ? 例程:僵尸进程 #include unistd.h #include sys/types.h #include stdio.h #include stdlib.h int main() { pid_t pid; pid = fork(); if (pid==0) { printf(child pid=%d\n, getpid()); exit(0); } else { sleep(20); printf(parent pid=%d\n, getpid()); exit(0); } } * Linux下的典型进程 ——守护进程 Linux下的守护进程 守护进程,即Daemon进程,是Linux中的后台服务进程,通常独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。如何理解

文档评论(0)

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

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

1亿VIP精品文档

相关文档