LINUX高性能服务器读书笔记之程序规范

背景:除了网络通信,服务器程序还有许多细节问题,。
特点:细节都是模板式的,所以只需要讲明白就好,遵循一定的规范就好
类别:1.1运行形式-->后台进程,又称为守卫进程。没有控制终端,也不会意外受到用户输入。
它的父进程是:init进程(pid是1 的进程)
1.2日志系统。一般至少输出到文件,还可以输出到专门的UDP服务器。一般在/var/log 都拥有自己的日志目录
1.3运行身份:某个专门的非root身份。例子:mysqld,httpd,syslogd等后台程序,都分别拥有自己的账户mysql,apache,syslog
1.4可配置。能处理很多很多命令行选项。如果一次性运行的选项太多,则需要配置文件来管理。一般会放在/etc。比如squid在/etc/squid3/squid.conf
1.5记录后台进程的pid。启动会有生成pid文件并且存入/var/run.例子:syslogd的pid文件是/var/run/syslogd.pid
1.6考虑系统资源和限制(自身最大负荷)例子:文件描述符的总数和内存总量。
linux细节处理方式
2.1日志:rsyslogd(syslog函数)
2.2用户信息:UID,EUID(有效用户ID),GID,EGID
EUID:方便资源访问。用途:它使得运行程序的用户拥有该程序的有效用户的权限。(su程序,su必须要访问/etc/passwd来改变用户信息。/etc/passwd是需要root权限的,所以普通用户能够访问它必须依靠EUID,拥有者可以设定自己拥有程序的set-user-id,命令是:chmod +s ****程序)

                2.3进程间关系
                2.3.1linux每个进程都隶属于一个进程组,除了pid还有PGID,每个进程组都有一个首领进程。首领进程的pid和PGID是一样的。
                2.3.2进程组会一直存在。当其中所有进程都退出或者加入其他组才会终止。
                2.3.3一个进程只能设置自己或者其子进程的{PGID。当子进程调用exec一系列函数后,父进程也不能再设置它的PGID。
                2.4 会话
                2.4.1定义:一些有关联的进程组将形成一个会话\                实现:非首领进程可以调用该函数来创建新会话。
                实现特点:调用进程会成为会话的首领,此时该进程是新会话的唯一成员。新建一个进程组,其PGID就是调用进程的PID,调用进程就是该组的首领。调用进程将离开终端
                函数:pid_t  setsid(void );
                特点:没有sid,linux认为他等于会话首领所在的进程组的PGID,pid_t  getsid(pid_t pid);
                2.5系统资源限制
                2.6改变工作目录和根目录
                2.6.1函数:获取当前工作目录和改变进程工作目录char * getcwd(char*  buf,size_t size);
                int chdir(const  char* path)
                函数2:改变进程根目录chroot
                int  chroot(const char*  path)

                2.7.1服务程序后台化

                linux 库函数
                int  deamon(int nochdir,int  noclose);
                参数nochdir:是否改变工作目录;0是为根目录,否则使用当前目录,noclose是0,标准输入和标准输出和标准错误输出都将重定向到/dev/null文件,否则依旧使用原有设备。该函数成功返回0.失败返回-1;

原文地址:http://blog.51cto.com/10725691/2068878

时间: 2024-11-03 17:18:14

LINUX高性能服务器读书笔记之程序规范的相关文章

linux高性能服务器读书笔记之服务器模型

1.模型一:C/S(经典的) 起因:TCP/IP协议是没有客户和服务端的区别.但是资源(视频,新闻,软件)都是被数据提供者所垄断 逻辑:服务器启动后,首先创建一个或多个监听socket,并且调用bind函数将其绑定到需要(自定义)的端口,然后调用listen函数等待客户连接 特点:客户连接是随机事件,需要某种I/O模型来监听连接. 例子:服务器I/O复用技术之一的select系统调用 (当监听接收到连接 ,服务器用accept来接收,并且分配一个逻辑单元为它服务,(fork系统产生逻辑单元,逻辑

tcpdump dns包(linux高性能编程读书笔记2)

  tcpdump -i eth0 -nt -s 500 port domain host -t A www.baidu.com www.baidu.com is an alias for www.a.shifen.com. www.a.shifen.com has address 119.75.217.109 www.a.shifen.com has address 119.75.218.70   IP 192.168.5.115.47195 > 192.168.5.1.domain: 169

《Linux程序设计》——读书笔记

UNIX是一套计算机操作系统应遵循的特定规范(定义了所有必需的操作系统函数的名称.接口和行为),完全符合该规范的操作系统才允许使用"UNIX"的商标,否则就是"类UNIX操作系统". 许多类UNIX系统都是商业性质的,如IBM的AIX,HP的HP-UX和Sun的Solaris:也有一些免费的,如FreeBSD和Linux. Linux是一个可以自由发布的类UNIX内核实现.发展之路:UNIX->Minix->Linux. Linux程序: Linux应用

linux高性能服务器编程

<Linux高性能服务器编程>:当当网.亚马逊 目录: 第一章:tcp/ip协议族 第二章:ip协议族 第三章:tcp协议详解 第四章:tcp/ip通信案例:访问Internet 第五章:linux网络编程基础API 第六章:高级IO函数 第七章:linux服务器程序规范 第八章:高性能服务器框架 第九章:IO复用 第十章:信号 第十一章:定时器 第十二章:高性能IO框架库libevent 第十三章:多进程编程 第十四章:多线程编程 第十五章:进程池和线程池 第十六章:服务器调制.调试和测试

Linux高性能服务器编程——定时器

 定时器 服务器程序通常管理着众多定时事件,因此有效组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,对于服务器的性能有着至关重要的影响.位置我们要将每个定时事件封装成定时器,并使用某种容器类型的数据结构,比如链表.排序链表和时间轮将所有定时器串联起来,以实现对定时事件的统一管理. Linux提供三种定时方法: 1.socket选项SO_RECVTIMEO和SO_SNDTIMEO. 2.SIGALRM信号 3.I/O复用系统调用的超时参数 socket选项SO_RCVTI

Linux 高性能服务器编程——高级I/O函数

重定向dup和dup2函数 [cpp] view plaincopyprint? #include <unistd.h> int dup(int file_descriptor); int dup2(int file_descriptor_one, int file_descriptor_two); dup创建一个新的文件描述符, 此描述符和原有的file_descriptor指向相同的文件.管道或者网络连接. dup返回的文件描述符总是取系统当前可用的最小整数值. dup2函数通过使用参数f

Linux内核架构读书笔记 - 2.5.4 核心调度器

什么是核心调度器? 参考前面的博文http://www.cnblogs.com/songbingyu/p/3696414.html 1 周期性调度器 作用: 管理内核中与整个系统和各个进程的调度相关的统计量 负责当前调度类的周期性调度方法 kernel/sched.c 1 /* 2 * This function gets called by the timer code, with HZ frequency. 3 * We call it with interrupts disabled. 4

Linux高性能服务器编程——信号及应用

 信号 信号是由用户.系统或者进程发送给目标进程的信息,以通知目标进程某个状态的改变或系统异常.Linux信号可由如下条件产生: 对于前台进程,用户可以通过输入特殊的终端字符来给它发送信号.比如输入Ctrl+C通常会给进程发送一个终端信号. 2.系统异常 系统状态变化 运行kill命令或调用kill函数 Linux信号概述 发送信号 Linux下,一个进程给其他进程发送信号的API是kill函数.其定义如下: #include <sys/types.h> #include <sign

Linux高性能服务器编程——多进程编程

多进程编程 多进程编程包括如下内容: 复制进程影映像的fork系统调用和替换进程映像的exec系列系统调用. 僵尸进程以及如何避免僵尸进程 进程间通信(Inter-Process Communication,IPC)最简单的方式:管道 3种进程间通信方式:信号量,消息队列和共享内存 fork系统调用 #include<unistd.h> pid_tfork(void); 该函数的每次都用都返回两次,在父进程中返回的是子进程的PID,在子进程中返回的是0.该返回值是后续代码判断当前进程是父进程还