7.Linux 高性能服务器编程 --- Linux 服务器程序规范

进程的关系:
1.每个进程都有一个进程组
2.每个进程组都有一个首领进程, 其 pig 等于 pgid
3.一个进程只能设置自己活着子进程的 PGID , 执行 exec 后,父进程也不能对子进程设置

setsid() 函数效果:
1.调用进程称为会话首领,此时该进程是新会话的唯一成员
2.创建一个进程组,其 PGID 就是调用进程ID,该调用进程称为该组的首领
3.调用进程将甩开终端

有关联的进程组将形成一个会话

软限制 : 发出警告,普通进程
硬限制 : 软限制的上线,一般是 root 身份运行的程序


服务器程序后台化:
1.创建子进程,关闭父进程
2.设置文件权限的掩码
3.创建新的会话,设置本进程未进程组的首领
4.切换工作目录
5.关闭标准输入设备,标准输出设备和标准错误输出设备
6.关闭其他已经打开的文件描述符
7.将标准输入,标准输出,标准错误重定向到 /dev/null 文件

 

Linux 服务器程序规范
	1.后台进程又称为守护进程。它没有控制终端,因而也不会意外的收到用户输入。
	2.Linux服务器程序通常有一套日志系统,大部分后台进程都在 /var/log目录下拥有自己的日志目录
	3.Linux服务器程序一般以某个专门的非 root 身份运行。
	4.Linux服务器程序通常是可配置的,在 /etc 下
	5.Linux服务器程序通常会在启动的时候生成一个PID文件并存入 /var/run目录中,以记录该后台进程的PID。
	6.Linux服务器程序通常需要考虑系统资源和限制,以预测自身能够承受多大的负荷。

	syslog();
	openlog();
	setlogmask();
	closelog();

用户信息:UID,EUID(有效用户),GID 和 EGID(有效组ID)
	用户信息对于服务器程序的安全性来说是很重要的,比如大部分服务器就必须以root身份启动,但不能以root身份运行。
	getuid();
	geteuid();
	getgid();
	getegid();
	setuid();
	seteuid();
	setgid();
	setegid();
	需要指出的是,一个进程拥有2个用户ID:UID 和 EUID。EUID存在的目的是方便资源访问:它使得运行程序的用户拥有该程序的有效用户的权限。

进程间的关系:
	Linux下每个进程都属于一个进程组,因此他们除了PID信息外,还有进程组ID(PGID)。
	getpgid();
	每个进程组都有一个首领进程,其PGID和 PID相同,进程组将一直存在,直到其中所有的进程都退出,或者加入到其他进程组。
	setpgid();
	一个进程只能设置自己或者其他子进程的PGID。并且,子进程调用 exec 系统函数后,我们也不能再在父进程中对它设置PGID。

会话:
	一些有关联的进程组将形成一个会话。
	setsid();
	该函数不能由进程组的首领进程调用,否则将产生一个错误。对于非首领进程,调用该函数不仅创建新会话,而且还有如下额外效果:
	1.调用进程称为会话的首领,此进程是新会话的唯一成员
	2.新建一个进程组,其PGID就是调用进程的PID,调用进程称为该组的首领
	3.调用进程将甩开终端

	ps -o pid,ppid,pgid,sid,comm

系统资源限制:
	Linux上运行的程序会收到资源限制的影响。
	getrlimit();
	setrlimit();
	软限制是一个建议性的,最好不要超越的限制。如果超越的话,系统可能会向进程发送信号以终止其运行。
	硬限制一般是软限制的上线,普通程序可以减少硬限制,而只有root身份运行的程序才能增加硬限制。
	此外,我们可以使用ulimit命令修改当前shell环境下的资源限制(软限制或者硬限制),这种修改对该 shell 启动的所有后续程序有效。我们也可以通过
  修改配置文件来改变系统软限制和硬限制,而且这种修改是永久有效的。

改变工作目录和根目录:
	getcwd();
	chdir();
	chroot();//改变进程根目录

服务器程序后台化:
	1.创建子进程,关闭父进程
		fork();
	2.设置文件权限掩码
		umask();
	3.创建新的会话,设置本进程未进程组的首领
		setsid();
	4.切换根目录
		chdir();
	5.关闭标准输入输出
		close(STDIN_FILENO);
	6.将标准输入输出都重定向到 /dev/null

 

 

 

 

7.1 日志

 

7.2 用户信息

 

7.3 进程间的关系

7.4 系统资源限制

 

7.5 改变工作目录和根目录

 

7.6 服务器程序后台化

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值