读书笔记:只有在事件发生的情况下执行非阻塞才能提高效率
2017-05-16 16:52
477 查看
僵尸进程:是指父进程退出之后,而子进程退出之前,该子进程即处于僵尸态.
出现僵尸进程的两种情况:
1.子进程结束之后系统并不会立即释放子进程的进程表项,而要等父进程来确认子进程的的退出信息(如果父进程还在),在这子进程退出之后,父进程读取子进程的退出信息之前,即子进程为僵尸进程.
2.父进程异常退出或结束,然而子进程还在运行.这时子进程的ppid变为1,即init进程,init 进程接管该进程,并等待子进程结束.
僵尸进程会占据着内核资源,这是不允许的,因为内核资源有限.我们可以在父进程内调用下列函数来防止出现僵尸进程.
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
wait将阻塞父进程,直到该进程的某个子进程结束.它返回结束进程的pid.
这wait函数的阻塞特性显然并不是服务器进程期待的,而waitpid函数解决了这个问题,处理方法如下:
waitpid 的第一个参数是指定了父进程所等待结束的子进程,第二个参数是存储结束的子进程的状态信息
waitpid 函数的第三个参数 options 可以控制waitpid的行为,该参数的常用取值是 WNOHANG (waitpid的行为将是非阻塞的:等待结束的进程结束会立即返回结束进程的pid,如果等待结束的子进程没有结束或者意外终止了,则waitpid会立即返回0)
当某个子进程要结束的时候就给父进程发送信号 SIGCHILD ,父进程接收到该信号后就调用waitpid函数,并把第一个参数设置为该子进程进程号,第三个参数设置为非阻塞选项,这样在子进程结束后就可以立即彻底结束该子进程,避免子进程长期占用内核资源或者因为调用wait函数而长期阻塞父进程(这就是所谓的事件发生的情况下调用非阻塞函数效率是最高的:在子进程结束事件发生时再调用非阻塞的等待子进程结束的函数waitpid )
出现僵尸进程的两种情况:
1.子进程结束之后系统并不会立即释放子进程的进程表项,而要等父进程来确认子进程的的退出信息(如果父进程还在),在这子进程退出之后,父进程读取子进程的退出信息之前,即子进程为僵尸进程.
2.父进程异常退出或结束,然而子进程还在运行.这时子进程的ppid变为1,即init进程,init 进程接管该进程,并等待子进程结束.
僵尸进程会占据着内核资源,这是不允许的,因为内核资源有限.我们可以在父进程内调用下列函数来防止出现僵尸进程.
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
wait将阻塞父进程,直到该进程的某个子进程结束.它返回结束进程的pid.
这wait函数的阻塞特性显然并不是服务器进程期待的,而waitpid函数解决了这个问题,处理方法如下:
waitpid 的第一个参数是指定了父进程所等待结束的子进程,第二个参数是存储结束的子进程的状态信息
waitpid 函数的第三个参数 options 可以控制waitpid的行为,该参数的常用取值是 WNOHANG (waitpid的行为将是非阻塞的:等待结束的进程结束会立即返回结束进程的pid,如果等待结束的子进程没有结束或者意外终止了,则waitpid会立即返回0)
当某个子进程要结束的时候就给父进程发送信号 SIGCHILD ,父进程接收到该信号后就调用waitpid函数,并把第一个参数设置为该子进程进程号,第三个参数设置为非阻塞选项,这样在子进程结束后就可以立即彻底结束该子进程,避免子进程长期占用内核资源或者因为调用wait函数而长期阻塞父进程(这就是所谓的事件发生的情况下调用非阻塞函数效率是最高的:在子进程结束事件发生时再调用非阻塞的等待子进程结束的函数waitpid )
相关文章推荐
- 怎样的数据库设计才能提高数据库执行效率---数据库设计篇
- 怎样的sql语句才能提高数据库执行效率---索引篇
- 一个优秀的Java程序员必须了解GC的工作原理、如何优化GC的性能、如何与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统、实时系统等,只有全面提升内存的管理效率,才能提高整个应用程序
- 如何测试sql语句性能,提高执行效率
- 利用render事件来提高程序的运行效率。
- HTML文本框内容发生变化时引发事件执行
- 提高IIS 5.0网站服务器的执行效率的八种方法
- 怎样提高SQL的执行效率(讨论)
- 提高php的执行效率问题
- 提高IIS服务器的执行效率
- 提高网页执行效率
- 精通COBOL--11.1.2 提高部分功能段执行效率
- 请求大家批评修改本文--论如何才能提高软件的开发效率及写代码效率
- 提高ASP页面的执行效率(上)
- 提高ASP页面的执行效率(中)
- 如何才能提高软件的开发效率及写代码效率
- 如何提高IIS 5.0网站伺服器的执行效率呢?
- 纪念一下麦蒂创造的奇迹,我一为这样的事情只有在游戏里才能发生呢?!
- 如何才能提高软件的开发效率及写代码效率
- 如何提高asp的SQL的执行效率提高数据库读取速度