1.名词解释
(1)什么是进程?------Centos7: systemd
进程是已启动的可执行程序的运行实例,进程由以下组成部分:
已分配内存的地址空间;
安全属性,包括所有权凭据和特权;
程序代码的一个或多个执行线程;
进程状态;
(2)进程的生命周期
父进程复制自己的地址空间(fork),创建一个新的子进程,每一个子进程都有自己的进程ID(PID),满足跟踪的安全性。父进程在子进程运行(running)期间会处于休眠(sleeping)状态。当子进程完成时会发出(exit)信号请求,退出时,子进程会关闭或丢弃其资源环境,剩余的部分称为僵停(僵尸Zombie)。父进程在子进程退出时收到信号而被唤醒,成(running)状态。
2.查看进程process
(1)静态查看进程ps
静态查看进程 ps
[root@bjz ~]# ps aux | less -----less(翻页)
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.6 128096 6708 ? Ss 16:20 0:01 /usr/lib/systemd/systemd
————————————————————————————
USER: 运行进程的用户
PID: 进程ID
%CPU: CPU占用率
%MEM: 内存占用率
VSZ: 占用虚拟内存
RSS: 占用实际内存
TTY: 进程运行的终端 //可以开启vim 查询到终端名称 (pts/0、pts/1)
STAT: 进程状态 man ps (/STATE)
———————————————————————————
R 运行
S 可中断睡眠 Sleep,(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
D 不可中断睡眠,(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
T 停止的进程
Z 僵尸进程
X 死掉的进程
————————————————————————————
[了解]
Ss s进程的领导者,父进程
S< <优先级较高的进程
SN N优先级较低的进程
R+ +表示是前台的进程组
Sl 以线程的方式运行
————————————————————————————
START: 进程的启动时间 //可以开启vim ,在用date验证。
TIME: 进程占用CPU的总时间
COMMAND: 进程文件,进程名
(2)进程排序 【--sort】
原理:sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。sort的一些选项:
sort的-u选项
它的作用很简单,就是在输出行中去除重复行。
sort的-r选项sort默认的排序方式是升序,如果想改成降序,就加个-r就搞定了。
sort的-n选项
你有没有遇到过10比2小的情况。我反正遇到过。出现这种情况是由于排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面喽。这也是sort的一贯作风。
我们如果想改变这种现状,就要使用-n选项,来告诉sort,“要以数值来排序”!
sort的-t选项和-k选项
sort提供了-t选项,后面可以设定间隔符。
指定了间隔符之后,就可以用-k来指定列数了。
命令#sort -n -k3 -t: /etc/passwd
扩展:
uniq 命令
uniq 是LINUX命令
用途:报告或删除文件中重复的行 注意:处理已经排序sort好的文件。
-c 在输出行前面加上每行在输入文件中出现的次数。
cut命令
剪切ip地址,如下:
[root@localhost shell]# ifconfig eth0 | grep "inet addr"
inet addr:192.168.1.199 Bcast:192.168.1.255 Mask:255.255.255.0
[root@localhost shell]# ifconfig eth0 | grep "inet addr" | cut -d : -f 2
192.168.1.199 Bcast //以 : 为分隔符,选取第二个域里面的内容,输出
[root@localhost shell]# ifconfig eth0 | grep "inet addr" | cut -d : -f 2 | cut -d ' ' -f 1
192.168.1.199 //以空格为分割符,选取第一个域内的内容,输出
[root@localhost shell]#
范围控制:
n:只有第n项
n-:从第n项一直到行尾
n-m:从第n项到第m项(包括m)
-m:从一行的开始到第m项(包括m)
-:从一行的开始到结束的所有项
# uptime |cut -d, -f3-5
# uptime |cut -d, -f3- 到行尾
1 以CPU占比升序排列------>%cpu
#ps aux --sort %cpu | less //升序排列
2 以CPU占比降序排列------>%cpu
#ps aux --sort -%cpu | less //-%cpu 降序排列
3 以内存占比升序排列------>%mem
#ps aux --sort %mem | less
4 以内存占比降序排列------>%mem
#ps aux --sort -%mem | less 也可用 #ps aux --sort=-%mem | less
(3)查看进程的父子关系
方法1:安装一个进程,查看父子进程以及状态,父子Ss和儿子S
#yum -y install httpd //安装网站程序
#systemctl start httpd //启动网站
#systemctl stop firewalld //关闭防火墙
#ps auxf | grep httpd //查看网站程序----->auxf (f-->format标准格式),加上f显示的内容更加详细
方法2:查看进程的父子关系,观察PID和PPID
[root@bjz~]#ps -ef
UID PID PPID(父) C STIME TTY TIME CMD
root 1 0 0 1月22 ? 00:00:07 /usr/lib/systemd/systemd
root 2 0 0 1月22 ? 00:00:00 [kthreadd]
root 3 2 0 1月22 ? 00:00:06 [ksoftirqd/0]
(4)自定义显示字段 ( ps axo)
[root@bjz ~]# ps axo user,pid,ppid,%mem,command //
xo指定列显示
[root@bjz ~]# ps axo user,pid,ppid,%mem,command |grep httpd
root 8310 1 0.1 /usr/sbin/httpd
apache 8311 8310 0.0 /usr/sbin/httpd
apache 8312 8310 0.0 /usr/sbin/httpd
apache 8313 8310 0.0 /usr/sbin/httpd
apache 8314 8310 0.0 /usr/sbin/httpd
apache 8315 8310 0.0 /usr/sbin/httpd
apache 8316 8310 0.0 /usr/sbin/httpd
apache 8318 8310 0.0 /usr/sbin/httpd
apache 8319 8310 0.0 /usr/sbin/httpd
root 9236 6798 0.0 grep httpd
-----------------------------------------------------------
[root@bjz ~]# ps axo user,pid,ppid,%mem,%cpu,command --sort -%cpu |less //针对某些程序,显示某些列,再进行排序。简洁明了
(5)查看指定进程的PID
方法1: cat[root@bjz~]# cat /run/sshd.pid
830
[root@bjz ~]# ps aux | grep sshd
root 10180 0.0 0.0 7224 1024 ? Ss 16:00 0:00 /usr/sbin/sshd
方法3: pgrep
----->pgrep 是通过程序的名字来查询进程的工具,一般是用来判断程序是否正在运行。(-l 列出程序名和进程ID)
[root@bjz ~]# pgrep -l sshd
10180 sshd
[root@bjz ~]# pgrep sshd
10180
方法4: pidof
[root@bjz ~]# pidof sshd
10180
(6)查看树进程 pstree
[root@bjz~]# pstree
如果没有这个命令请安装 #yum install -y psmisc
(7)动态查看进程 top
1.常用指令 :h|?帮助
M 按内存的使用排序
P 按CPU使用排序
N 以PID的大小排序
R 对排序进行反转
f 自定义显示字段
1 显示所有CPU的负载
< 向前
> 向后
z 彩色,Z设置彩色,使用数字调整
W 保存top环境设置
扩展:uptime [root@LinServ-1 ~]# uptime 15:31:30 up 127 days, 3:00, 1 user, load average: 0.00, 0.00, 0.00
显示内容说明:
15:31:30 //系统当前时间
up 127 days, 3:00 //主机已运行时间,时间越大,说明你的机器越稳定。
1 user //用户连接数,是总连接数而不是用户数
load average: 0.00, 0.00, 0.00 // 系统平均负载,统计最近1,5,15分钟的系统平均负载
2.动态查看进程 top,像windows的任务管理器
[root@localhost ~]# top -d 1 //每1秒刷新。
[root@localhost ~]# top -d 1 -p 10126 查看指定进程的动态信息 -d代表时间 -p代表进程
[root@localhost ~]# top -d 1 -p 10126,1 查看10126和1号进程
[root@localhost ~]# top -d 1 -u apache 查看指定用户的进程
[root@localhost ~]# top -d 1 -b -n 2 > top.txt //-b附加参数,只看2次top信息后写入到文件
[root@localhost ~]#vim top.txt //最后打开文件详细阅读
(8)使用信号控制进程
1.信号种类
给进程发送信号
[root@tianyun ~]# kill -l //列出所有支持的信号
编号 信号名
1) SIGHUP 重新加载配置---使配置快速生效
2) SIGINT 键盘中断Ctrl+C
3) SIGQUIT 键盘退出Ctrl+\,类似SIGINT
9) SIGKILL 强制终止,无条件
15) SIGTERM 终止(正常结束),缺省信号
18) SIGCONT 继续
19) SIGSTOP 停止,该进程还未结束, 只是暂停执行
20)SIGTSTP 暂停Ctrl+Z
(9)相对优先级 nice
1.nice值范围: -20~19 nice 值越高: 表示优先级越低,例如+19,该进程容易将CPU 使用量让给其他进程。
nice 值越低: 表示优先级越高,例如-20,该进程更不倾向于让出CPU。
2.两个值:nice值和PR值
在top中显示的优先级有两个,PR值和nice值
查看进程的nice级别
(1) 使用top查看nice级别-------------例如:# top -d 1 -p 8721
NI: 实际nice值
PR: 将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39
(2)使用ps查看nice级别(自定义,显示pid 和comm以及nice值并排序。)
[root@localhost ~]# ps axo pid,command,nice,cls --sort=-nice
cls表示显示策略列。
TS 表示该进程使用的调度策略为SCHED_OTHER,普通策略,常规调度
FF表示高级进程first in first out。高级策略
3.设置不同nice值得进程
启动进程时,通常会继承父进程的 nice级别,默认为0。观察两个程序的不同nice值。
[root@localhost ~]# nice -n -5 sleep 6000 & ------> -n指定程序运行优先级的调整值 ,&程序后台运行
[1] 2220
[root@localhost ~]# nice -n -10 sleep 7000 &
[2] 2229
[root@localhost ~]# ps axo command,pid,nice | grep sleep
sleep 6000 2220 -5
sleep 7000 2229 -10
4.更改现有进程的nice级别
(1)使用top修改使用top更改nice级别
[root@localhost ~]# top -d 1 -p 2630
按r键 //调整进程的优先级(Nice Level) (-20高) ---0--- (19低)
回车 //确认该程序。
-20
回车 //确认修改nice值。
如果直接使用top,使用R调整nice值,先输入PID,再输入nice值即可。
(2)使用shell更改
修改他的nice值。
[root@localhost ~]# renice -20 2669
2669 (进程 ID) 旧优先级为 0,新优先级为 -20
观察修旧的nice值。
注意:
1. 18继续,19暂停
# kill -STOP 5571 //等同于-19
# kill -cont 5571 //等同于-18
2.杀死一个用户
[root@bjz ~]# pkill -u alice
杀掉了用户。
3.杀死一个终端
查询当前用户。发现多人用同一个账号登录系统。在其中一个普通账户上开启一个sleep程序。
[root@localhost ~]# w w-----显示目前有几个用户登录,以及他们在做什么
[root@localhost ~]# pkill -t pts/2 //终止pts/2上所有进程
上一步杀死的只是终端上的所有程序。要想杀死该用户的终端,使用-9
[root@localhost ~]# pkill -9 -t pts/2 //终止pts/2上所有进程 并结束该pts/2
4. 通过top杀死该进程。
[root@localhost ~]# top -d 1 -p 2058 (d----date p ---PID)
k
9
回车
5.kill带ID,killall带程序名称 ------killall 后面加进程的名称
[root@localhost ~]# killall vim
(9)作业控制 jobs
1.简介 在shell中同时运行多个命令。&和ctrl+Z
作业控制是一个命令行功能,允许一个shell 实例来运行和管理多个命令。
如果没有作业控制,父进程fork()一个子进程后,将sleeping,直到子进程退出。
使用作业控制,可以选择性暂停,恢复,以及异步运行命令,让 shell 可以在子进程运行期间返回接受其他命令。
关键词介绍
foreground, background, and controlling terminal
foreground: 前台进程:是在终端中运行的命令,该终端为进程的控制终端。前台进程接收键盘产生的输入和信号,并允许从终端读取或写入到终端。
background: 后台进程:没有控制终端,它不需要终端的交互。
2. 直接运行后台程序。暂停一个前台程序。
[root@bjz ~]# sleep 3000 & //运行程序(时),让其在后台执行
[root@bjz ~]# sleep 4000 //按ctrl+z,将前台的程序挂起(暂停)到后台
[2]+ Stopped sleep 4000
3.执行暂停程序,和调动后台程序至前台。----------#jobs 查看后台运行进程的状态和序号
[root@bjz ~]# bg 2 //让作业2在后台,从暂停到运行
[root@bjz ~]# fg 1 //将作业1调回到前台
[root@bjz ~]# kill %1 -------//kill %1,结束后台作业1.
注意,kill 1 和 kill %1 不同,前者终止PID为1的进程,后者是杀死后台的作业。
(10)文件系统proc
虚拟文件系统:存储内核硬件的信息(cpuinfo、meminfo)、临时存储进程运行的状态信息,proc下的数字代表进程的PID
1.查看CPU的信息
# lscpu
或# cat /proc/cpuinfo
2.查看内存的信息
# less /proc/meminfo
或# free -m -----m是以兆为单位去查看内存的信息
3.查看服务器是否支持虚拟化------多路复用技术
lm(64位)---------------------------------
vmx 支持虚拟化 Intel----------------------
svm 支持虚拟化 AMD-------------------------
# egrep 'lm|vmx|svm' /proc/cpuinfo
4.查看内核--------/boot中也能查看内核
# cat /proc/cmdline
5.查看CPU使用率
# uptime