进程

内核的功用:

	进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等

进程的概念:

	Process: 
		运行中的程序的一个副本,是被载入内存的一个指令集合
		进程ID(Process ID ,PID )号码被用来标记各个进程
		UID 、GID 、和SELinux 语境决定对文件系统的存取和访问权限
		通常从执行进程的用户来继承
		存在生命周期
		进程中可以包括一个或多个线程(thread),内存空间共享
	task struct(结构):
		Linux内核存储进程信息的数据结构格式
	task list:
		多个任务的task struct 组成的链表

进程创建:

		init :第一个进程
			父子关系
		进程:都由其父进程创建,CoW(写时复制),fork(), clone()

进程优先级:

	系统优先级:
		数字越小,优先级越高
		0-139(CentOS4,5)
			各有140个运行队列和过期队列
		0-98 ,99(CentOS6)
	实时优先级: 99-0
		值越大优先级越高
	静态优先级:100-139
	
	进程默认启动时的nice 值为0 ,优先级为120
	
	只有根用户才能降低nice 值(提高优先性)
	
	nice 值(动态优先级):
		-20到19,对应系统优先级100-139 或99
	BigO:
		时间复杂度,用时和规模的关系
		O(1), O(logn), O(n) 线性, O(n^2) 抛物线, O(2^n)
	时间片:
		0-99的时间片到了,还继续运行,而99以后,时间片到后,就开始等待
		
	进程优先级调整:
		进程优先级通过nice值进行调整,进程优先级=老的进程的优先级+nice值。
		nice值是有正负的,当给定的nice 值为负数时,那么新的进程优先级值就越小,进程就被优先处理。
		nice值在-20~19,root用户可以随意调整自己和其他用户进程的nice值,且范围为-20到19。
		普通用户只能调整自己进程的nice值,且范围为0-19,也就是说普通用户只能减少自身进程的优先级,而不能增大优先级,这主要是为了避免用户抢占资源。
		需注意的是,对于普通用户来说,你当前进程的nice值为5,那么他所能调整的nice值范围只能是5到19,而且不能小于5的值。
		调整进程的nice值的方法:
			1、对于尚未启动的进程
				nice -n N command  ##N表示nice值,范围-20~19
			2、对于已经启动并处于运行中的进程
				renice -n N PID
			3、如果修改一个进程的nice值,那么它的子进程的nice值也会继承其新的nice值,也就是说nice值可以在父进程向子进程传递。

进程内存:

	Page Frame:
		页框,用存储页面数据,存储Page 4k
	LRU :
		Least Recently Used ,近期最少使用算法, 释放内存物理地址空间和线性地址空间
	MMU:
		Memory Management Unit,负责转换线性和物理地址
	TLB:
		Translation Lookaside Buffer,翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存

IPC:

	Inter Process Communication(进程间的通信)
	同一主机: 
		使用signal(信号)
		shm:shared memory(共享内存空间)
		semaphore(旗语):信号量,一种计数器
	不同主机:
		使用rpc(remote procedure call(远程过程调用))
		socket(套接字):IP 和端口号

LRU 算法

	假设序列为 4 3 4 2 3 1 4 2
		物理块有3个,则
	第1轮 4调入内存 4
	第2轮 3调入内存 3 4
	第3轮 4调入内存 4 3
	第4轮 2调入内存 2 4 3
	第5轮 3调入内存 3 2 4
	第6轮 1调入内存 1 3 2
	第7轮 4调入内存 4 1 3

进程类型:

	根据进程与系统终端的关系:
		守护进程:
			 daemon,在系统引导过程中启动的进程,和终端无关进程,(window中叫作服务)
		前台进程:
			跟终端相关,通过终端启动的进程
		注意:两者可相互转化
	根据进程占用资源的多少:
		cpu密集型,是对cpu 占用率高的进程, CPU-Bound :CPU 密集型,非交互
		IO密集型,是等待i/o时间长的进程,IO-Bound :IO 密集型,交互

进程状态:

	Linux内核进行的是抢占式多任务
	运行态:running
	就绪态:ready
	睡眠态:
		可中断:interruptable
		不可中断:uninterruptable
	停止态:stopped,暂停于内存,但不会被调度,除非手动启动
	僵死态:zombie,结束进程,父进程结束前,子进程不关闭

作业管理

	登录系统后的每个工作进程都是当前bash的子进程,每个子进程也能同时运行。
	Linux 的作业控制
		前台作业:通过终端启动,且启动后,在停止之前一直占据终端;
		后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)
		注意:
			此两类方式相关作业,仍然与终端相关;这意味着,终端终止,将会导致与此终端相关的所有作业被终止。
			后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。
	让作业运行于后台
		运行中的作业: Ctrl+z --->后台休眠
			后台休眠变成后台执行
				jobs
				bg jobid
			后台执行变位前台执行
				jobs
				fg jobid
		尚未启动的作业: COMMAND &
			在6上,终端断开后,仍然执行;
			而在7上,终端断开后,就不再执行了。
		作业控制:
			# fg [JOB_NUM]:把指定的后台作业调回前台
			# bg [JOB_NUM]:让送往后台的作业在后台继续运行
			# kill [JOB_NUM]:终止指定的作业
			
		
	如果希望送往后后,剥离与终端的关系
		#nohup COMMAND & 
			nohup会stdout到nohup.out文件中,但可以重定向到/dev/null:nohup COMMAND &  >/dev/null  &
		#screen;COMMAND(这是切换了个终端,然后执行命令)
			创建新screen 会话
				screen –S [SESSION]
			加入screen 会话
				screen –x [SESSION]
			退出并关闭screen 会话
				exit
			剥离当前screen 会话
				Ctrl+a,d
			显示所有已经打开的screen 会话
				screen -ls
			恢复某screen 会话
				screen -r [SESSION]

程序的并行运行

	方法1
		vi all.sh
		f1.sh&
		f2.sh&
		f3.sh&
	方法2
		(f1.sh&);(f2.sh&);(f3.sh&)
	方法3
		{ f1.sh&   f2.sh&   f3.sh& }

管理临时文件

	CentOS6 使用/etc/cron.daily/tmpwatch定时清除临时文件
	CentOS7 使用systemd-tmpfiles-setup 服务实现
	配置文件:
		/etc/tmpfiles.d/*.conf
		/run/tmpfiles.d/*.conf
		/usr/lib/tmpfiles/*.conf
		/usr/lib/tmpfiles.d/tmp.conf
		/tmp 1777 root root 10d
		/var/tmp 1777 root root 30d
	命令行使用systemd-tmpfiles命令进程管理临时文件
原文地址:https://www.cnblogs.com/shenxm/p/8447761.html