Linux高性能服务器编程第七章Linux服务器程序规范
Linux高性能服务器编程第七章Linux服务器程序规范
Hoshea Zhang除了网络通信外,服务器程序还需要考虑其他细节问题,比如:
- Linux服务器程序一般以后台进程形式进行,又称守护进程,没有控制终端,因而不会意外接收到用户输入,父进程通常为init进程
- Linux服务器通常有一套日志系统,能输出日志到文件
- Linux服务器程序一般以某个专门的非root身份运行,比如mysqld/httpd等后台进程,分别拥有自己的运行账户
- Linux服务器程序通常可配置
- Linux通常会启动时生成一个PID文件存入目录中,记录该后台进程的PID
- Linux服务器程序通常要考虑系统资源和限制,预测自身能承受多大负荷
日志
用户信息
用户信息对于服务器程序的安全性来说是很重要的,比如大部分服务器就必须以root身份启动,但不能以root身份运行。下面这一组函数可以获取和设置当前进程的真实用户ID(UID)、有效用户ID (EUID)、真实组ID(GID)和有效组ID (EGID):
进程间关系
进程组
Linux下每个进程都隶属于一个进程组,因此它们除了PID信息外,还有进程组ID(PGID)。我们可以用如下函数来获取指定进程的PGID:
1 |
|
服务器程序后台化
1 | bool daemonize (){ |
linux也有自带的库函数:
1 |
|
第一个参数指定是否改变工作目录,传递0则设置为根目录,否则使用当前工作目录
第二个参数为0,三个输出都重定向到/dev/null文件,否则还是使用原来的设备