摘要:
僵尸进程就是父进程fork之后并没有wait子进程。在子进程退出的时候,内核释放该进程所有的资源,比如文件描述符,内存,等等,但是依然为该进程保留一定的信息,只有该进程的父进程wait之后才会释放掉这些保留的信息。如果父进程没有wait,那么子进程就变成了僵尸进程。在高并发的服务器中,僵尸进程会有很大的危害。如果僵尸进程过多,那么就会有大量的进程号被僵尸进程占用,但是系统所能使用的进程是有限的。如果僵尸进程多到连新进程的进程号都没法提供,那么服务器就会一直处于拒绝状态了。 但是高并发服务器的父进程肯定会fork许多子进程,而且有可能父进程不需要知道任何子进程的结束信息,如果还wait每个... 阅读全文
摘要:
正准备把unpV1再看一遍,但是居然把unp的编译方法给忘记了。查了查资料,才弄好。这就是以前没有养成做笔记的习惯所带来的后果了,浪费了20分钟时间。现在把unpV1源码的使用方法记录下来: 1. 编译静态库并复制到/usr/lib和/usr/lib64.cd libmakecd ..sudo cp libunp.a /usr/libsudo cp libunp.a /usr/lib64 2.修改unp.h#include "../config.h" 的../去掉,即#include "config.h"加上#define MAX_LINE 2048注 阅读全文
摘要:
原文地址:http://blog.sina.com.cn/s/blog_93b45b0f01014qyb.html前多时间梳理了一些Linux上的编程,其实就是认识的大量的系统调用(POSIX)。这里有一个我们经常提出的问题就是fread,read的区别。(当然这两个分别代表了操作文件系统的两套不同的函数,包括open,read, write, seek等)。我们都知道,他们的区别就是一个(read)是UNIX 中的系统调用,是类UNIX系统,提供给程序员操作文件的接口(要不然你如何操作文件?);而另外一个则是C语言提供的读取文件的函数库,自然这个函数库(ANSI)的实现是以对应的系统调用为基 阅读全文