一:进程和线程
1:内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、 安全功能等
2:Process: 运行中的程序的一个副本,是被载入内存的一个指令集合,而且可以载入内存多个。(下图解释进程的执行过程)
从上图可以看出程序的执行必须要从硬盘调到内存中,成为进程,才能执行。而且硬盘中相同的程序可以在在内存中运行多分。在内存中,每个进程会得到一个号码,,也就是进程ID(PID),用来标记各个进程。
3:UID、 GID、和SELinux语境决定对文件系统的存取和访问权限,通常从执行进程的用户来继承存在生命周期
4:task struct: Linux内核存储进程信息的数据结构格式
5:task list:多个任务的的task struct组成的链表
6:进程创建
init:第一个进程其他进程都是他的子进程。
进程:都由其父进程创建, CoW,fork(), clone()
7:线程:线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
8:线程与进程的区别可以归纳为以下4点:
1)地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。
2)通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。
3)调度和切换:线程上下文切换比进程上下文切换要快得多。
4)在多线程OS中,进程不是一个可执行的实体。
二:进程优先级
1:进程优先级:每个进程都有相应的优先级,优先级决定它何时运行和接收多少 CPU 时间系统优先级: 数字越小,优先级越高。
2:nice值:我们都知它是反应一个进程“优先级”状态的值,其取值范围是-20至19,一共40个级别。这个值越小,表示进程”优先级”越高,而值越大“优先级”越低
3:priority值:就是ps命令中看到的PRI值或者top命令中看到的PR值。
4:实时进程/非实时进程
内核在设计的时候,将实时进程单独映射了100个优先级,这些优先级都要高与正常进程的优先级(nice值),它们的主要区别就是通过优先级来区分的。所有优先级值在0-99范围内的,都是实时进程,所以这个优先级范围也可以叫做实时进程优先级,而100-139范围内的是非实时进程。
5:设置nice值
renice -n # (-20~19) pid
nice -n #(-20~19) -# command
6:查看nice值
ps axo ni[ce]
三:进程管理常用命令
1:ps(ps有两种方式)
(1)BSD方式
a 所有用户在所有终端上运行的前台进程
x 当前用户运行的所有进程(包括前台进程和后台daemon)
ax 所有用户运行的所有进程
aux 所有用户运行的所有进程,结果中显示用户名
f 显示父子进程关系
-C 用进程名进行过滤
axo配合
o 自定义输出列
%cpu
%mem
pid
uid
gid
cmd
comm
tty 显示终端名,如为?,表示daemon后台进程
ruser 命令的发起人
euser 命令的真正执行人
state
k 排序或--sort
UNIX方式
-e 显示所有进程
-f 显示完整格式
-ef 以完整格式显示所有进程
-eF 以更完整格式显示所有进程
-efH 显示父子进程关系
-eo 自定义显示结果,如下
ps -eo %cpu,%mem,pid,nice,pri,stat,comm
2:pgrep
-u UID/USERNAME 基于执行程序的用户名进行搜索
-l 显示的结果中增加进程名
-t 终端名
-P 查看子进程
3:pidof 进程名 查询对应进程名的PID
4:uptime :显示当前时间,系统已启动的时间、当前上线人数,系统平均负载 top
5:vmstat:显示虚拟内存信息
r:可运行
b:处于不可中断睡眠状态的进程个数
swpd:当前虚拟内存的已使用空间
free:物理内存的剩余空间,直致不够用时,才会使用虚拟内存
buffer:用于buffer的内存总量
cache:用于cache的内存总量
si:表示内存从swap读入的总量
so:表示从内存写出到swap的总量
bi:表示内存从硬盘读入的总量
bo:表示从内存写出到硬盘的总量
in:每秒中断的速率
cs:进程切换速率
us:用户空间时间
sy:内核空间,系统空间
id:空闲时间
wa:等待时间
st:被虚拟机偷走的时间 vmstat -s 详细查看内存信息
6: iostat:统计CPU和设备IO信息
7:pmap:进程对应的内存映射
pmap pid
pmap -x pid
ls -l /proc/40052/fd |wc -l
通过查看进程文件描述符的数量是否增长来判断是否有内存泄露的问题
8:kill
-0 无作为,可以用来单纯判断进程是否运行.
-1 -HUP:强制进程重读配置文件
-2 -INT: 中止正在运行的进程;相当于Ctrl+c
-3 -QUIT: 相当于ctrl+\
-9 -KILL: 强制杀死正在运行的进程
-15 -TERM: 终止正在运行的进程 (默认)\
killall
进程名
pkill
-u 用户名 杀死指定用户所运行的所有进程
pkill -t pts/1 杀死指定终端上运行的所有进程
四:进程的前后台
1:常用命令:
ctrl+z 将运行在前台的进程暂停 或 kill -19 PID
bg 将在当前终端上暂停的进程,放入后台继续运行 或kill -18 PID
fg 将在当前终端上暂停的或在当前终端上后台运行的进行,放入前台继续运行
2:使进程不再依附于终端在后台运行
nohup command &> /dev/null
screen; command
(command&)
(1):用第一种方法后,我们可以看到,当关闭终端后,该进程依然存在。
(2):用第二种方法可以发现,关闭终端后,该进程依然存在,且依赖于screen进程,加入screen后发现进程还在执行。
(3):用第三种办法,也可以达到效果。
3:并行运行多条命令
(1)将多个脚本写在一个脚本里面。
vim all.sh
sh1&
sh2&
shn&
(2)直接在命令行里输入如下命令。
(sh1&);(sh2&)
(3):在命令行输入如下命令
{sh1&sh2&sh3}
五:任务计划
1:at
(1)at hh:mm
atq 或 at -l 列出指定队列中等待运行的作业
at -c 队列序号 查看指定序号队列的详细信息
atrm 队列序号 或 at -d 队列序号 删除指定序号的队列
(2)at的其他设置方式
echo wall 123 |at 20:00
[root@centos7 ~]# at 20:00 << EOF
> wall hello
> wall 123
> wall nihao
> EOF
at 20:00 -f at.txt
注意:之前我们一直在讲at的设置,那有没有想过这些at十一is很么方式存在的呢?接下来我们来看一下,到/var/spool /at 目录下我们可以发现以下文件,这就是at文件,他们保存在了硬盘中,也就是说开机后这些未执行的操作依然有效。
at在指定时间时,如果还没过,就表示当天,如果过了,它会自动理解为下一天。
(3):at计划结果的查看
对于一些有输出结果的计划,我们要怎样查看它的输出呢?我们可以通过邮件来查看,系统会自动将结果以邮件的形式发送给我们。
(4)at的任务是否能运行依赖于atd服务
centos6: service atd start
centos7: systemctl start atd
(5)限制用户不能使用at配置计划任务
当仅/etc/at.deny 存在时(默认)写入deny的用户不能配置at
当/etc/at.allow存在时/etc/at.deny失效,只有写在allow中的用户才能配置at
当/etc/at.allow及/etc/at.deny都不存在时,仅有root才能配置at
2:cron
(1)/etc/crontab 系统级计划任务
56 10 * * * root /app/backup 仅能通过 root定义,不过可以以普通用户的身份去执行计划任务中的命令。(可以用普通用户的身份执行,但不能定义计划任务)
日志/var/log/crond
(2)特殊的日期表达方式
@reboot Run once after reboot. 当下次启动计算机时,启动到crond服务时运行该计划。
@yearly 0 0 1 1 *
@annually 0 0 1 1 *
@monthly 0 0 1 * *
@weekly 0 0 * * 0
@daily 0 0 * * *
@hourly 0 * * * *
centos7:
1.grub : linux16 最后加上空格rd.break 按Ctrl + x
2.mount -o remount,rw /sysroot
3.vi /sysroot/etc/crontab
centos6:
1.grub : kernel 最后加空格1 先Esc加到主界面 再b启动
2.vim /etc/crontab
/etc/crontab 是系统级计划任务的主配置文件
--> /etc/cron.d 是系统级计划任务的扩展配置文件,其中的所有都应该是按crond的格式编写,每一个文件都会生效
--> /etc/cron.d/0hourly
01 * * * * root run-parts /etc/cron.hourly 又用run-parts命令,扩展到了/etc/cron.hourly目录,其中的所有脚本均会在每小时的01分执行
(3)crontab
crontab -e [-u username]
crontab -l
crontab -r 直接该用户的crontab文件,故所有计划全删除,如只需删除某条,直接-e删除该行即可。
crontab -i -r 功能同上,在删除前寻问
(4)限制用户不能使用crontab配置计划任务
当仅/etc/cron.deny 存在时(默认)写入deny的用户不能配置crontab
当/etc/cron.allow存在时/etc/cron.deny失效,只有写在allow中的用户才能配置crontab
当/etc/cron.allow及/etc/cron.deny都不存在时,仅有root才能配置crontab