Linux进程管理介绍
内核的功能:
进程管理,网络管理,文件系统,安全管理,内核管理,驱动程序
process:进程,运行中的程序的一个副本,是被载入内存的一个资源的集合
进程ID(PID)号码被用来标记各个进程,通常从执行进程的用户来继承访问权限,存在生命周期
Linux的第一个进程
centos6:init
centos7:systemd
进程都是由父进程创建的,写时复制,新创建好的新进程还是和父进程使用同一空间,等待有CPU发指定操作时,从父进
程中复制出一块空间使用。
进程状态:
运行:running
就绪:ready
睡眠:可终端睡眠(interruptable),处于睡眠状态的进程最多
不可终端睡眠(uninterruptble)
停止:stopped,暂停于内存中,但不会被调度,除非手动启动
僵死:zombie,结束进程,父进程结束前,子进程不关闭
进程的分类:
CPU-Bound:CPU密集型
IO-Bound:IO读写密集型
pstree:查看进程树
-p:显示进程IP
ps:显示当前进程快照,所谓快照就是瞬间的状态,再次查看时,值会不一样
Linux系统各进程的相关信息保存在/proc/PID目录下以进程ID号为目录的文件中
ps命令选项有三种风格:
1 UNIX options,选项前加-,短选项
2 BSD options, 选项前不加-
3 GNU long options,选项前--,长选项
Unix选项:-A -e
BSD选项:a,常用风格
GNU选项:--all
BSD选项常用选项
a:所有终端中的进程
x:包括不链接终端的进程
u:显示进程所有者的信息
f:显示进程树
k|--sort 属性:对属性排序,属性前加-表示倒叙
o 属性:指定显示哪些属性,pid,cmd,%cpu,%mem等等
L:显示支持的属性列表
UNIX选项常用选项
-C cmd:指定命令查看,多个命令用逗号隔开
-L:显示线程
-e:显示所有进程,相当于-A
-f:显示完整格式程序信息
-F:显示更完整格式程序信息
-H:以进程层级格式显示
-u userlist:指定有效用户id或名称
-U userlist:指定真正的用户的ID或名称
-g gid:指定有效的gid或组名称
-G gid:指定真正的的GID或名称
-p PID:显示指定PID的进程
ps输出的属性:
VSZ:虚拟内存集,线性内存
RSS:常驻内存集,实际使用的
STAT:进程的状态表示
R:running
S:可唤醒睡眠状态
D:不可唤醒睡眠状态
T:停止状态
Z:僵死状态,kill掉父进程可杀死僵死状态的进程
+:前台进程
l:多线程进程
L:内存分页并带锁
N:低优先级进程
<:高优先级进程
s:子进程会话发起者
例:
ps -ft pty/0 :查看指定终端正在运行那些命令
例:查看占用最多内存和CPU的进程
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%mem | head
ps -eo pid,ppid,%cpu,%mem,cmd --sort=-%cpu | head
uptime:显示当前时间,系统已启动时长,当前登录系统用户数量,系统平均负载(1、5、10分钟的平均负载,一般不会超过1)
系统平均负载:指定时间间隔内运行队列中的平均进程数
通常每个CPU内核的当前活动进程不应大于3,那么系统性能良好。如果每个CPU内核的任务数大于5,那么此主机的型能有严重问题
如果Linux主机是1个双核CPU,当load average为6时说明机器已被充分使用
top:进程管理工具
有许多内置命令
排序:
P:以占CPU百分比,多的在上面
M:以占内存百分比,多的在上面
T:累计占CPU时长
首部信息显示:
uptime信息:l 命令
tasks及CPU信息:t 命令
CPU分别显示:1 (数字)
memory信息:m 命令
退出:q
修改刷新时间间隔:s
终止指定进程 :k
修改颜色:Z
保存文件:W,保存至用户家目录下隐藏文件.toprc
htop:top增强版,需要EPEL源安装
iostat:可测试磁盘读写性能
1 :表示每一秒刷新一次
vmstat:设备性能。CPU、MEM之类的
pidof cmd:查看指定命令或程序的进程号
pmap:查看命令或程序占用的内存信息,先试用pidof查看一下进程号
pmap `pidof dd`
dstat:替代vmstat,iostat,ifstat,集成的工具,新工具
-c:显示CPU信息
-d:显示磁盘信息
-g:显示page相关统计数据
-m:显示memory相关统计数据
-n:显示network相关统计数据
-p:显示process相关统计数据
-r:显示io请求相关统计数据
-s:显示swapped相关统计数据
iotop:命令
是一个用来监视磁盘I/O使用状况的top类工具,iotop具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信
息,可查看每个进程是如何使用IO
iotop输出信息:
第一行:read和write速率统计
第二行:实际的read和write速率
第三行:参数如下
线程ID(按p切换为进程ID)
优先级
用户
磁盘读速率
磁盘写速率
swap交换百分比
IO等待所占的百分比
线程/进程命令
常用参数:
-o:是显示正在产生I/O的进程或线程,除了传递参数,可以在运行过程中按o键
-b:非交互模式,一般用来记录日志
-n NUM:设置检测的次数,默认无限,在非交互模式下很有用
-d SEC:设置每次检测的间隔,默认一秒,接收1.1之类的
-p PID:指定检测的进程/线程
-u user:指定检测某个用户产生的I/O
-P:仅显示进程
-a:显示累计的I/O,而不是带宽
-k:使用kB单位,而不是对人友好的单位,在非交互模式下,脚本编程有用
-t:加上时间戳,非交互模式
-q:禁止头几行,非交互模式,有三种方式
-q 只在第一次监测时显示列明
-qq 永远不显示列名
-qqq 永远不现实I/O汇总
交互式按键:
left和right方向键:改变排序
r:反向排序
o:切换至选项--only
p:切换至选项--processes
a:奇幻之--accumulated选项
q:退出
i:改变线程的优先级
lsof:list open files查看当前系统文件的工具,在Linux环境下,一切皆文件,用户通过文件不仅可以访问常规数据,还可以访问网络连接和硬件,系统在后台都为该应用程序分配了一个文件描述符
参数:
-c <进程名>:列出指定进程打开的文件
例:lsof -c vim
-p <进程号>:指定进程号,可以查看该进程打开的文件
例:lsof -p `pidof vim`
-u:查看指定用户打开的文件
例:lsof -u root
+d:查看指定目录下被打开的文件,+D是递归查看
例:lsof +d /etc
-i <条件>:列出符合条件的进程(4、6、协议、:端口、@IP)
例:lsof -i :22
-n:不反向解析网络名字
-n <目录>:列出使用NFS的文件
恢复已删除文件,注意:只能恢复正在使用的文件,没有使用的文件恢复不了,需借助其他工具
lsof | grep /var/log/messages
rm -rf /var/log/messages
lsof | grep /var/log/messages
cat /proc/653/fd/4 :653代表的是进程的PIP号使用pidof cmd查看进程的IP号
cat /proc/653/fd/4 > /var/log/messages
kill:向进程发送控制信号
以实现对进程管理,每个信号对应一个信号,信号名称以SIG开头(可省略),不区分大小写
显示当前系统可用信号:kill -l 或 trap -l
常用信号:man 7 signal
0) 用来错误检查,echo $?如果为0,则正常,为1不正常
例:kill -0 `pidof httpd | tr -s " " "\n" | sort -n |head -1` &> /dev/null || systemctl restart httpd
解释:测试服务是否存在错误,如果存在错误则重启服务
1)sighup 无需关闭进程而让其重读配置文件
2)sigint 终止正在运行的进程,相当于Ctrl+c
3)digquit 输入quit命令退出,Crtl+\
9)sigkill 强制杀死正在运行的进程
15)sigterm 终止正在运行的进程,输入kill不加信号默认为15
18)sigcont 继续执行
19)sigstop 后台休眠
killall <进程名>:将只要关于指定进程名的进程全部关闭
killall -0 <进程名>:测试某服务是否正常运行
pkill
-u UID:生效者
-U uid:真正发起运行命令者
-t tty:于指定终端相关的进程
-l:显示进程名
-a:显示完整格式的进程名
-P pid:显示指定进程的子进程
Linux的作业控制
让作业运行至后台
Ctrl+z
command & :命令后跟&符号
查看作业:jobs
作业控制:
fg 作业号:作业号是使用jobs查看的,将指定的后台作业调回前台
bg 作业号:让送往后台的作业在后台继续运行
kill 作业号:终止指定的作页
18)sigcont 继续执行,在后台休眠时,可让其在后台继续执行
19)sigstop 后台休眠,在后台执行时,可让其在后台停止
后台作业虽然被送到后台运行,但其仍然与终端相关,退出终端,将会关闭后台作业,如果希望送往后台后,剥离与终端的关系.
特殊场景:在生产中,都是通过远程来干活的,假如在备份一个需要半小时才可以完成的任务,而Windows电脑中间可能会断电之类的故障,不想让任务中断,让任务保持运行,直到完成才自动退出,使用以下命令
例:
screen :首先开启screen共享窗口
ping 127.0.0.1 :在screen中运行命令。
然后关闭终端或Windows突然掉电,重连后使用screen查看,就依然可以看到任务,然后screen -ls查看,可以使用
screen -r恢复,就不会导致任务进行一半时损坏
并行运行:
同时运行多个进程
例:{{ ping 127.1;ping 127.2; }& { ping 127.3; ping 127.4; }&}
例: #!/bin/bash
{
ping -c2 127.1
ping 127.2
} &
{
ping -c2 127.3
ping 127.4
} &
----------------------
{
ping 192.168.0.100
} &
{
ping www.baidu.com
} &