进程管理

创建并运行新进程 fork(), execl(), exit(), getpid(), getppid() fork(): 当前进程(父进程)创建一个新的进程(子进程),创建后的父、子进程继续执行fork()调用点后面的程序,当然也可以使用比如execl() 来替换后续要执行的程序。 execl(): 替换当前进程后续要执行的程序(从execl()调用点后续的程序被替换,也就是说原来在execl()调用点后面的程序不再执行,而去执行execl参数中指定的程序)。 exit(): 终止一个进程,将进程占用的所有资源(内存,文件描述符)交还内核,由其进行再次分配。 getpid(): 获取当前进程PID getppid(): 获取父进程PID /* * 获取当前进程pid: int getpid(); * 获取父进程pid: int getppid(); * 执行新的程序: int execl(char *path, char *arg, ...); * 创建子进程: int fork(); * 终止进程: void exit(int status); */ #include <stdlib.h>#include <sys/types.h>#include <unistd.h>#include <stdio.h> int main(void) { long pid; pid = fork(); /* fork执行错误 */ if(pid == -1) { perror("fork"); exit(EXIT_FAILURE); } /* parent */ if(pid > 0) { int pret; printf("pid: %d, child_pid: %d\n", getpid(), pid); pret = execl("/usr/bin/sleep","sleep", "100", NULL); if(pret == -1) { perror("parent execl"); exit(EXIT_FAILURE); } } /* child */ if(pid == 0) { int cret; printf("pid: %d, parent_pid: %d\n", getpid(), getppid()); cret = execl("/usr/bin/sleep","sleep", "100", NULL); if(cret == -1) { perror("child execl"); exit(EXIT_FAILURE); } } } 输出

DNS 及 bind

DNS 及 bind .note-content {font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeiti, "Microsoft YaHei", "WenQuanYi Micro Hei", SimSun, Song, sans-serif;} DNS 及 bind DNS(Domain Name System)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。 目前,负责管理域名和IP地址的分配等与互联网相关的任务的组织是ICANN,ICANN是美国加利福尼亚的非营利社团,主要由互联网协会的成员组成。 DNS 及 bind DNS介绍 DNS域名空间 DNS解析 资源记录 DNS端口 DNS 的实现之 BIND BIND介绍 BIND实验 DNS介绍 DNS域名空间 计算机之间的网络通信是靠IP识别彼此的,目前使用的IPv4地址由32位二进制数组成,对于计算机来说,最擅长的莫过于识别数字,而人类却很难记住这么长的数字,人类容易记住的是有意义的名字,早期的人们为了解决这个问题,将IP与主机名的对应关系存储于电脑的hosts文件中: Linux: /etc/hosts windows: %WINDIR%/system32/drivers/etc/hosts 早期网络还未流行起来的时候,计算机数量不多,使用hosts文件存储的方法还可行,后期网络大规模扩展以后,使用hosts文件存储IP与主机名映射关系遇到了诸多问题: hosts 文件无法同步到所有计算机 hosts 文件越来越大,占用过多存储空间,查询缓慢 为了解决这一日益突出的问题,加州大学伯克利分校的研究生设计出了一套分层式IP与名称映射数据库管理系统,就是今天的DNS系统。DNS分层结构如下图所示: 这种树状的分层结构我们称之为DNS域名空间,通过分层的方式将DNS划分成多层级区域,最顶层为根域,下一层为顶级域(一级域),二级域,… ,根域不再存储所有的资源记录,仅存储顶级域的资源记录,将其它层级的资源记录委派给其子域,同理顶级域也将更低层级的资源记录委派给下层子域。在逻辑上已将DNS分成诸多区域,物理上我们可以将各区域数据库存储于同一台电脑上,也可以将同一个区域数据库存储于不同的电脑上。