第6章 进程管理

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        //升序排列

以CPU占比降序排列------>%cpu

   #ps  aux   --sort  -%cpu  |  less      //-%cpu  降序排列

3  以内存占比升序排列------>%mem

   #ps  aux --sort  %mem  | less

以内存占比降序排列------>%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



方法2:   ps
[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@tianyun ~]# top          //回车,立刻刷新。按z彩色显示,按F,通过光标设置列的顺序。
[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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值