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 服务器程序后台化
7.Linux 高性能服务器编程 --- Linux 服务器程序规范相关推荐
- 基于Linux的网络编程——网络聊天程序
网络聊天程序是目前应用极为广泛的一种网络软件,对于方便人们的交流沟通非常有效,同时,作为一种典型的网络应用,编写网络聊天程序是学习基于Linux的网络编程的有效方法. 结合任务需求设计该程序,程序采用 ...
- Linux原始网络编程,Linux操作系统网络编程 原始套接字 (1)
Linux操作系统网络编程--原始套接字 (1) http://soft.zdnet.com.cn/software_zone/2007/1020/568223.shtml 我们在前面已经学习过了网络 ...
- linux 文件操作 编程,Linux系统编程------------文件操作(基础)
一.文件操作 1.1 Linux文件系统结构 1.1.1 Linux常见系统目录 /bin : 存放普通系统可执行的命令(ls wc等) /sbin : 存放系统管理程序(fsck等) /b ...
- linux进程通信发送方式,Linux服务器编程——Linux系统编程之进程通信
进程通信又称IPC IPC方法 方法:管道(最简单) 信号(开销最小) 共享映射区/共享内存(无血缘关系) 本地套接字(最稳定) Linux文件类型: - 文件 d 目录 l 符号链接 s ...
- Linux高性能服务器之Linux网络编程基本API(6)
前言 socket地址API:socket最开始的含义是一个P地址和端口对(ip,port).它唯一地表示了使用TCP通信的一端.本书称其为socket地址. socket基础API:ocket的主要 ...
- linux编写运行shell程序,Linux的Shell编程运行Shell程序的方法有哪些呢?
用户可以用任何编辑程序来编写Shell程序.因为Shell程序是解释执行的,所以不需要编译成目的程序.按照Shell编程的惯例,以 bash为例,程序的第一行一般为"#!/bin/bash& ...
- Linux高性能server编程——高级I/O函数
高级I/O函数 pipe函数 pipe函数用于创建一个管道,实现进程间的通信. #include <unistd.h> int pipe(int pipefd[2]); 通过pipe ...
- linux系统io编程,Linux系统编程(1) —— 文件IO
本文主要对Linux系统中文件I/O的基本操作进行说明. 在Linux系统编程中,对文件进行处理的流程,通常是: 打开文件 读写文件 关闭文件 Linux内核对每一个进程维护一个打开的文件列表, 该文 ...
- linux守护进程编程,Linux守护进程的编程实现
Linux 守护进程的编程方法 守护进程(Daemon)是执行在后台的一种特殊进程.它独立于控制终端而且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种非常实用的进程.Linux的大多数s ...
- linux c 进程编程,linux c/c++ 编程之-----进程操作
进程 系统调用 getpid 可以得到进程的 ID,而 getppid 可以得到父进程(创建调用该函数进程的进程)的 ID. #include ; pid_t getpid(void); pid_t ...
最新文章
- NC45实现二叉树先序、中序和后序遍历
- 大环境下瑟瑟发抖辞职的第二天,拿了两个 offer
- java78条注意事项
- python inspect.stack() 的简单使用
- 《Access 2007开发指南(修订版)》一一1.11 额外的提示和技巧
- 毕业之后......
- 【渝粤教育】电大中专新媒体营销实务 (13)作业 题库
- 一个简单易用的导出Excel类
- printf函数源码linux,再来一版简易的printf函数实现
- 程序的图标无法改变_安卓微信7.0.7内测版发布,细节更新,小程序功能优化
- iOS “项目名” has conflicting provisioning settings.
- JavaScript或MyEclipse—如何解决js文件导入到MyEclipse工程后出错?
- JSP教程第2讲笔记
- 未来计算机教师职业愿景展望,教师愿景与职业规划
- 尤雨溪:Vue3即将成为新的默认版本!
- SQL基础1--select
- 看图吧地图数据如何玩转企业地信圈
- matlab添加文件夹语音_基于MATLAB的语音处理
- 常用数据结构和算法操作效率的对比总结
- 超声波风速风向仪换能器 能够在大风速下稳定工作