背景:除了网络通讯,服务器程序还有许多细节问题,。
特色:细节都是模板式的,因此只须要讲明白就好,遵循必定的规范就好
类别: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 ****程序)mysql
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;