僵尸进程
摘要:僵尸进程就是父进程fork之后并没有wait子进程。在子进程退出的时候,内核释放该进程所有的资源,比如文件描述符,内存,等等,但是依然为该进程保留一定的信息,只有该进程的父进程wait之后才会释放掉这些保留的信息。如果父进程没有wait,那么子进程就变成了僵尸进程。在高并发的服务器中,僵尸进程会有很大的危害。如果僵尸进程过多,那么就会有大量的进程号被僵尸进程占用,但是系统所能使用的进程是有限的。如果僵尸进程多到连新进程的进程号都没法提供,那么服务器就会一直处于拒绝状态了。 但是高并发服务器的父进程肯定会fork许多子进程,而且有可能父进程不需要知道任何子进程的结束信息,如果还wait每个...
阅读全文
posted @
2013-03-12 19:02
NeilHappy
阅读(400)
推荐(0)
unpV1的源码的使用方法
摘要:正准备把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注
阅读全文
posted @
2013-03-12 14:55
NeilHappy
阅读(1011)
推荐(0)
read 与 fread 的区别的误解(转载)
摘要:原文地址:http://blog.sina.com.cn/s/blog_93b45b0f01014qyb.html前多时间梳理了一些Linux上的编程,其实就是认识的大量的系统调用(POSIX)。这里有一个我们经常提出的问题就是fread,read的区别。(当然这两个分别代表了操作文件系统的两套不同的函数,包括open,read, write, seek等)。我们都知道,他们的区别就是一个(read)是UNIX 中的系统调用,是类UNIX系统,提供给程序员操作文件的接口(要不然你如何操作文件?);而另外一个则是C语言提供的读取文件的函数库,自然这个函数库(ANSI)的实现是以对应的系统调用为基
阅读全文
posted @
2013-03-12 13:31
NeilHappy
阅读(5050)
推荐(0)
Shell中的exec和source解析(转载)
摘要:原文地址:http://lynnkong.iteye.com/blog/1811254exec和source都属于bash内部命令,在讲这两个命令之前,前谈一下fork的概念:fork是linux的系统调用,用来创建子进程(child process)。子进程是父进程(parent process)的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境。子进程与父进程唯一不同的地方在于pid(process id)。环境变量只能单向从父进程传给子进程,不管子进程的环境变量如何变化,都不会影响父进程的环境变量。脚本的执行:1.新产生一个shell然后再执行scripts,也就是通常的sh
阅读全文
posted @
2013-02-28 10:38
NeilHappy
阅读(655)
推荐(0)
UNIX系统编程小结(三)----进程相关
摘要:进程即一个程序的动态执行。引用apue上的一句话:"A thorough understanding of the UNIX System's process control is essential for advanced programming".一.总述 1.进程的开始 在C语言中,进程是由一个main函数开始。 int main(int argc,char *argv[]) 我们可以向程序传入参数,以字符串数组的形式存储在argv,同时argc记录传入参数的个数。而且还可以在main的第三个参数中传入环境变量的数组,但一般不这样做。用全局environ更.
阅读全文
posted @
2012-12-19 10:59
NeilHappy
阅读(1447)
推荐(1)
unix系统编程小结(二)------文件和目录
摘要:一.对linux的安全机制的一点感悟 各种权限,read,write,execute,set-user-ID,set-group-ID,sticky bit,对目录的权限,对文件的权限,用于保证系统安全的各种组合技,各种经典。比如,如果我们想unlink一个文件,就必须拥有该文件所在目录的write与execute的权限。二.两个小例子 1.当文件有hole时,cp命令会同时拷贝这些hole为'\0'。这里是一个实现了拷贝时跳过文件hole的程序。ps:我用的buffer是一个字节的,效率很低,但如果用大的buffer就会使得hole被移除,使得原先分开的字符被连上。我没想好如
阅读全文
posted @
2012-12-09 09:07
NeilHappy
阅读(1233)
推荐(1)
Linux下计算程序运行时间的两种方法(转载)
摘要:原文地址:未知。第一种方法:#i nclude <sys/time.h> int gettimeofday(struct timeval *tv,struct timezone *tz); strut timeval { long tv_sec; /* 秒数 */ long tv_usec; /* 微秒数 */ }; gettimeofday将时间保存在结构tv之中.tz一般我们使用NULL来代替。以下是程序:#i nclude <sys/time.h> #i nclude <stdio.h> #i nclude <math.h>void fun
阅读全文
posted @
2012-12-08 11:33
NeilHappy
阅读(16988)
推荐(0)
unix系统编程小结(一)------文件I/O
摘要:基本看完了《unix/linux编程实践教程》,实现了几个小项目,觉得很不过瘾,书中对很多system call的细节和原理都没讲。在尝试看linux内核分析的书时发现很多困难,所以拿起apue,继续打基础。读着读着,对apue上瘾了。这是题外话,就说这么多。一.我对文件I/O的理解 文件I/O最基本的两个函数就是read和write,书中也叫做unbuffered I/O。刚看到这个"unbuffered",我就奇怪,操作系统不是对所有的输入输出都会做缓存吗(delayed write),为什么还会存在unbuffered?但接着我就明白了,这里的ubuffered,是指
阅读全文
posted @
2012-12-04 20:57
NeilHappy
阅读(1667)
推荐(1)
linux下dup2的实现
摘要:这是apue的一个习题,要求不用fcntl来实现dup2.这是我的思路:循环调用dup复制file descriptor,直到与指定的相同。如果您有更高效的方法,请告诉小弟我,非常感谢! 代码如下:#include <apue.h>#include <unistd.h>#include <my_error.h>#include <fcntl.h>#define MAX 1000//function:neil_dup2int neil_dup2(int filedes,int filedes2){ if(filedes2==filedes) ret
阅读全文
posted @
2012-12-02 11:25
NeilHappy
阅读(1674)
推荐(0)
CPU 用户时间 系统时间(转载)
摘要:原文地址:http://blog.csdn.net/volkswageos/article/details/6520973 时钟时间(墙上时钟时间wall clock time):就是一个进程从开始运行到结束运行后,时钟走过的时间,这其中包含了进程在阻塞和等待状态的时间。 用户CPU时间:就是用户的进程获得了CPU资源以后,在用户态执行的时间。 系统CPU时间:用户进程获得了CPU资源以后,在内核态的执行时间。 进程的三种状态为阻塞、就绪、运行。 时钟时间 = 阻塞时间 + 就绪时间 +运行时间 用户CPU时间 = 运行状态下的用户空间时间 系统CPU时间 = 运行状态下系统空间的时间...
阅读全文
posted @
2012-12-01 22:10
NeilHappy
阅读(433)
推荐(0)
apue编译方法(收集整合)
摘要:源码的使用: 1.编辑apue.2e文件夹下的Make.defines.linux,修改WKDIR=/home/var/apue.2e为你的apue.2e目录。 2.修改apue.2e/std/linux.mk把全部的nawk改为awk. 3.编辑apue.2e/include/apue.h ,添加#define ARG_MAX 4096 4.打开apue.2e/threadctl/getenv3.c(还有getenv1.c),添加:#include "apue.h" 5.在你的apue.2e目录下:make 另外,在自己写程序添加apue.h和使用书中带的错误处理的函数时
阅读全文
posted @
2012-11-30 13:35
NeilHappy
阅读(283)
推荐(0)