进程概念
task struct:内核存储进程信息的数据结构
task list: 多个任务的task struct 组成的链表
创建进程 CoW Copy on Write 写时复制
子进程只有在数据发生变化的时候才会把父进程的内存空间复制一份给子进程,否则父进程和子进程是 占用一块相同的内存空间的.
进程的几种状态
1.创建
2.就绪
3.执行
4.阻塞
5.睡眠
1.可中断睡眠
2.不可中断睡眠
6.终止
进程优先级
数字越小,优先级越高
每个优先级包含两个队列,分别为运行队列和过期队列.在cpu运行同一个优先级的进程中,运行队列和过期队列会不停的进行切换.
进程内存
内存存放进程信息是以页框为基本单位的,每页的大小是4k
LRU内存近期最少使用算法
物理地址空间和虚拟地址空间(线性地址空间)
对于一个应用程序来说,操作系统会分配一段真实的内存空间给此进程,但进程会把此段物理空间虚拟成操作系统中整个内存空间.
进程之间的通信
同一主机
signal 信号
shared memory 共享内存
semaphore 信号量,一种计数器
不同主机
socket IP地址+端口号
RPC 远程调用
MQ 消息队列
进程管理工具
Linux进程管理工具 ps、pgrep, pkill、uptime、top、htop、 vmstat、glances,kill, killall
Linux作业控制jobs、fg、bg、kill及进程优先级nice值调整
进程前后台切换
18,19 代表信号类型
cmd & 虽然能把命令发送到后台执行,但是依然和执行的终端相连.把终端关闭,后台进程也会被终止掉.
剥离后台进程和终端的关系
nohup COMMAND &>/dev/null &
screen;COMMAND
使用nohup 启动的后台进程如果把对应的终端关闭后,后台进程的父进程由原来的Bash进程变成了systemd(系统的第一个进程)
进程的并行执行
同时运行多个进程,提高效率
方法1
vi all.sh
f1.sh&
f2.sh&
f3.sh&
方法2
(f1.sh&);(f2.sh&);(f3.sh&)
方法3
{ f1.sh& f2.sh& f3.sh& }
计划任务
未来的某个时间点执行一次性任务
batch: 系统自行选择空闲时间去执行指定任务(用的比较少)
at: 指定具体时间点执行某些命令
命令文件保存在 /var/spool/at 目录下
计划任务命令中的标准输出默认会以邮件的方式发送给用户 可以把标准输出重定向到 &> /dev/null 中
黑名单和白名单的设置规则
系统默认存在一个黑名单 /etc/at.deny文件 白名单文件需要自己手动添加 /etc/at.allow
如果有白名单文件就只查看白名单里面的用户,只有在白名单里的用户才有权限创建at任务
其它用户不管在不在黑名单里都无权创建at任务
如果只有黑名单文件就只查看黑名单里面的用户,只有黑名单的用户才会无权创建任务,其它用户都可以创建计划任务.
如果黑名单文件和白名单文件都不存在,那么只有root用户才能创建任务,其它用户都无法创建计划任务.
周期性的运行某个任务
cron
/etc/crontab 配置格式 只有root用户才有权限修改此文件
* 代表 每分钟 or 每小时 or 每天(循环执行) 注意和 0 的区别 0代表整点(一个时间点执行一次)
分(0-59) 时(0-23) 天(1-31) 月(1-12) 星期([0,7]-6) 用户名 cmd
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作.
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”.
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”.
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次
同时正斜线可以和星号一起使用 例如*/10.如果用在minute字段,表示每十分钟执行一次.
黑白名单设置同at规则一样
普通用户创建定时计划任务
crontab -e
存放的任务文件存储在 /var/spool/cron 目录下
计划任务依赖的后台服务
at 依赖 系统后台服务 atd
cron 依赖 后台服务 crond