看了这本书以后才知道自己对Linux了解的肤浅,希望写一些笔记对大家有所帮助。
一。进程分类:
1、硬实时进程例如飞机操作系统
2、软实时进程有些延迟
3、普通进程,分配进程优先级。
二。进程生命周期
1. 运行 分配CPU时间之后进入运行状态
2. 等待 进程回收CPU资源进入等待状态
3.睡眠 进程等待事件,状态从运行转到睡眠,但是无法从睡眠转到运行,只能转到等待,然后进入循环
4.终止 程序退出
5. 僵尸 正常退出程序的流程是程序必须由另外一个进程或者用户杀死通过SIGTERM或SIGKILL信号,第二个重要的进程的父进程在子进程终止时必须调用或者已经调用wait4系统调用。僵尸程序就是正常退出程序,但同时没有执行wait4函数,其数据尚未从进程表删除之前,处于僵尸状态。系统重启以后即可解决僵尸进程。
三。进程内核结构
代码省略,太过复杂主要分成以下几个方面
1. 状态和执行信息,例如进程pid号,到父进程及其他有关进程的指针、优先级和程序执行有关的时间信息例如CPU时间
2.有关已经分配的虚拟内存信息
3.进程身份凭据例如uid,gid以及权限
4.task_struct定义在sched.h定义了STATE状态
TASK_RUNNING 进程处于可以运行状态
TASK_INTERRUPTIBLE 针对等待某事件或其他资源的睡眠进程设置的
TASK_UNINTERRUPTIBLE 因为内核指示而停用的睡眠进程
TASK_STOPPED 停止运行
TASK_TRACED
EXIT_ZOMBIE 僵尸
EXIT_DEAD 值wait系统调用已经发出,而进程完全从系统移除之前的状态
5. 资源限制
resource.h
struct rlimit{
unsigned long rlim_cur;
unsigned long rlim_max;
}
rlim_cur是进程当前的资源限制称为soft limit
rlim_max是hard limit
系统调用函数setrlimit增减当前限制
系统调用函数getrlimits检查当前限制
setrlimit资源限制:
RLIMIT_CPU 按毫秒计算的最大CPU时间
RLIMIT_FSIZE 允许的最大文件长度
RLIMIT_STACK 用户状态栈的最大长度
RLIMIT_DATA 数据段的最大长度
RLIMIT_CORE 内存转储文件的最大长度
RLIMIT_RSS 常驻内存的最大尺寸
RLIMIT_NPROC 与进程真正UID关联的用户可以拥有的进程的最大数目
RLIMIT_MEMLOCK 不可换出页的最大数目
RLIMIT_AS 进程占用的虚拟地址空间的最大尺寸
RLIMIT_LOCKS 文件锁的最大数目
RLIMIT_SIGPENDING 待决信号的最大数目
RLIMIT_MSGQUEUE 信息队列的最大数目
RLIMIT_NICE 非实时进程的优先级
RLIMIT_PTPRIO 最大的实时优先级
查看以前内容通过cat /proc/self/limits