第三章第四节 服务器程序配置
系统资源限制
运行的程序必定会受到系统资源的限制,如物理设备的限制(CPU数量、内存大小等)、系统策略限制(CPU时间)、以及具体实现的限制(文件名的最大长度)。
1 | /* |
其中结构体rlimit的定义如下。
1 | struct rlimit{ |
rlim_cur指定资源的软限制,rlim_max指定资源的硬限制。软限制是一个建议性的、最好不要超越的限制,如果超越的话,系统可能向进程发送信号以终止其运行。而硬限制一般是软限制的上限,普通程序可以减小硬限制,只有以root身份运行的程序才能增加硬限制。
re参数指定资源限制类型,比较重要的资源限制类型见下表。
改变工作目录与根目录
获取进程当前目录的函数为getcwd。
1 | /* |
- 若buf=NULL且size=0。则getcwd会在内部使用malloc动态分配内存,并将进程的当前目录存储在其中,然后返回动态分配的内存地址。注意要自己释放这段内存。
- 若当前工作目录的绝对路径名加一个字符串结束符’\0’的长度大于size,则getcwd返回NULL,并设置errno为ERANGE。
改变进程工作目录的函数为chdir。
1 | /* |
改变进程根目录的函数为chroot。
1 | /* |
chroot并不改变进程的当前目录,因此调用chroot后,还是需要使用chdir(“/“)来将工作目录切换到新的根目录。
只有特权进程才能改变根目录。
改变进程根目录之后,可能无法访问类似/dev的文件,但是进程原先打开的文件描述符依然有效。因此可以使用调用chroot函数之前的文件描述符来访问调用chroot函数之后无法访问的文件。
服务器程序后台化
1 | /* |