day 21 进程管理(管理进程)

1、管理进程状态

当程序运行为进程后,如果希望停止进程,此时可以使用linux的kill命令对进程发送关闭信号,还有killall pkill命令

(1)使用kill-l列出系统所支持的信号

[root@yangdan ~]# kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL      5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL    10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM    15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP    20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU    25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO      30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+1247) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-1352) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    

数字 信号意义 信号翻译
1 SIGHUP 通常用来重新加载配至文件
9 SIGKLL 强制杀死进程
15 SIGTERM 终止进程,默认kill使用该信号

(2)使用kill命令杀死指定PID的进程

1、给vsdtpd 进程发送信号1,15
[root@yangdan ~]# yum install vsfpd -y
[root@yangdan ~]# systemctl start vsftpd
[root@yangdan ~]# ps aux |grep vsftpd
root       8117  0.0  0.1  53276   576 ?        Ss   16:39   0:0 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root       8119  0.0  0.2 112708   984 pts/0    S+   16:40   0:0 grep --color=auto vsftpd

2、发送重载信号,例如vsftpd 的配置文件发生改变,希望重新加载
[root@yangdan ~]# kill -1 8117
[root@yangdan ~]# ps aux |grep vsftpd
root       8117  0.0  0.1  53276   752 ?        Ss   16:39   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root       8122  0.0  0.2 112708   988 pts/0    R+   16:42   0:00 grep --color=auto vsftpd



3、发送停止信号,当然vsftpd 服务有停止的脚本 systemctl stop vsftpd
[root@yangdan ~]# kill 8117
[root@yangdan ~]# ps aux |grep vsftpd
root       8125  0.0  0.2 112708   988 pts/0    R+   16:46   0:00 grep --color=auto vsftpd
[root@yangdan ~]# systemctl start vsftpd
[root@yangdan ~]# ps aux |grep vsftpd
root       8133  0.0  0.1  53276   576 ?        Ss   16:47   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root       8135  0.0  0.2 112708   988 pts/0    R+   16:47   0:00 grep --color=auto vsftpd

4、发送强制停止信号,当无法停止服务时,可强制终止信号
[root@yangdan ~]# kill -9 8117

(3)linux系统中的killall pkill命令用于杀死指定名字的进程。可以使用kill命令杀死指定进程PID的进程,要找到需要杀死的进程,然后使用ps命令配合grep来查找进程。

1、通过服务名称杀掉进程
[root@yangdan ~]# ps aux|grep nginx
root       8153  0.0  0.2 112708   988 pts/0    R+   17:01   0:00 grep --color=auto nginx
[root@yangdan ~]# systemctl start nginx
[root@yangdan ~]# pkill nginx
[root@yangdan ~]# killall nginx

2、使用pkill踢出从远程登录到本机的用户,终止pts/0上所有进程,并且bash也结束(用户被强制退出)
[root@yangdan ~]# pkill -9 -t pts/0

2、管理后台进程

(1)什么是后台进程

通常进程都会在终端前台运行,一旦关闭终端,进程也随着结束,此时就希望进程能在后台运行,将在前台的进程放入后台运行,可以及时关闭终端也不影响进程的正常运行。

(2)为什么将进程放入后台运行

如:我们此前在国内服务器传输大文件时,由于网络的问题需要传输很久,如果在传输的过程中出现网络抖动或不小心关闭终端则会导致传输失败,如果将传输进程放入后台,就不会出现这样的问题。

(3)使用什么工具将进程放入后台

之前都选择使用&符号经进程放入后台,然后使用jobs、bg、fg等饭方式常看进程状态,这种方式不太好,最好使用screen
(1)jobs、bg、fg的使用(不推荐)

[root@yangdan ~]# sleep 3000 & // 运行程序(时),让其在后台执行
[root@yangdan ~]# sleep 4000  //^Z,将前台的程序挂起(暂停)到后台
[2]+ stopoed sleep 400
[root@yangdan ~]# ps aux |grep sleep
[root@yangdan ~]# jobs //查看后台作业
[1]- Running sleep 3000 &
[2]+ Stopped sleep 4000

[root@yangdan ~]# bg %2 //让作业2放入后台
[root@yangdan ~]# fg %1 //将作业1调回到前台
[root@yangdan ~]# kill %1  //kill 1,终止 PID 为 1 的进程

[root@yangdan ~]# (while :;do data; sleep 2; done) & //进程在后台运行,但输出依然在当前终端
[root@yangdang ~]# (while :;do data; sleep 2; done) &>/dev/null &

(2)screen的使用(推荐使用,生产必用)

1、安装
[root@yangdan ~]# yum install screen -y

2、开启一个screen窗口,指定名称
[root@yangdan ~]# screen -S wget_mysql

3、在screen窗口执行任务即可
4、平滑的退出screen,但不会终止screen中的任务。注意:如果使用exit 才真的关闭screen窗口,所以要使用ctrl+a+d 关闭会话
screen -S  表示指定开启的名称

5、查看当前正在运行的zcreen有哪些
[root@yangdan ~]# screen -list  查看后台运行的程序
There is a screen on:
        8217.wget_mysql (Attached)
1 Socket in /var/run/screen/S-root.

6、进入正在运行的screen
[root@yangdan ~]# screen -r wget_mysql
There is a screen on:
        8217.wget_mysql (Attached)
There is no screen to be resumed matching wget_mysql.
[root@yangdan ~]# screen -r 8217
There is a screen on:
        8217.wget_mysql (Attached)
There is no screen to be resumed matching 8217.

3、进程的优先级 [进阶]

(1)什么是优先级

优先级是指优先享受资源,如:老人优先、小孩优先等

(2)为什么有系统优先级

举例:去游乐园玩摩天轮,游乐园正常情况下是不用排队的,当节假日来临时大人、小孩就比正常情况下的人要多好多则会导致响应很慢,假设我是游乐园的VIP(最高优先者),无论有多少人在排队,我是优先去玩摩天轮的人,至于没有花钱的人员(较低优先级)则进入等待状态。

(3)系统中如何给进程配置优先级

在启动进程时,为不同的进程使用不同的调度策略
nice 值越高:表示优先级越低,如+19,该进程容易将CPU使用量让给其他进程
nice 值越低:表示优先级越高,如-20,该进程更不倾向于让出CPU
1)使用top或ps命令查看进程的优先级

1、使用top可以查看nice优先级。 NI:实际nice级别,默认0。 PR:显示nice值,-20映射到0.+19映射到39
   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                          
   560 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 xfs-log/sdc2  
   783 root      20   0  225724   4252   2776 S  0.0  0.9   0:00.17 abrt-watch-log   

2、使用ps查看进程优先级
[root@yangdan ~]# ps axo command,nice |grep sshd |grep -v grep
/usr/sbin/sshd -D             0
sshd: root@pts/0              0

2)nice指定程序的优先级。格式:nice -n 优先级数字 进程名称

1、开启vim并且指定程序优先级为-5
[root@yangdan ~]# nice -n -5 vim &
[1] 8296

2、查看该进程的优先级情况
[root@yangdan ~]# ps axo pid,command,nice |grep 8296
  8296 vim                          -5

3)renice命令修改一个正在运行的进程优先级。格式:renice -n 优先级数字 进程pid

1、查看sshd进程当前的优先级状态
[root@yangdan ~]# ps axo pid,command,nice |grep sshd
  1444 /usr/sbin/sshd -D             0
  8180 sshd: root@pts/0              0

2、调整sshd主进程的优先级
[root@yangdan ~]# renice -n -20 1444
1444 (process ID) old priority 0, new priority -20

3、调整之后记得退出终端
[root@yangdan ~]# ps axo pid,command,nice |grep sshd
  1444 /usr/sbin/sshd -D           -20
  8180 sshd: root@pts/0              0
[root@yangdan ~]# exit

4、当再次登录sshd服务,会有主进程fork子进程(那么子进程会继承主进程的优先级)
[root@yangdan ~]# ps axo pid,command,nice |grep sshd
  1444 /usr/sbin/sshd -D           -20
  8180 sshd: root@pts/0            -20

4、系统平均负载 [进阶]

发现系统变慢时,第一件事就是执行top或uptime命令,了解系统的负载情况

[root@yangdan ~]# uptime
 19:02:01 up 10:44,  2 users,  load average: 0.00, 0.00, 0.03
#熟悉前面几列,分别为当前时间、系统云行时间、正在登录用户数。

#最后三个数字,依次为过去 1 分钟、5 分钟、15 分钟的平均负载(Load Average)

(1)什么是平均负载

平均负载不就是单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,平均负载与CPU使用率并没有直接关系。

(2)可运行状态和不可中断状态

1)可运行状态进程,是指正在使用CPU或者正在等待CPU的进程,也就是ps命令看到处于R状态的进程
2)不可中断进程,系统中最常见的是等待硬件设备的I/O响应,也就是ps命令中看到的D状态的进程
当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,是不能被其他进程打断,这个时候就处于不可中断状态。如果进程被打断了,就容易出现磁盘数据与进城数据不一致的问题。
所以,不可中断状态实际上是系统对进程和硬件设备的一种保护机制。因此可以简单地理解为,平均负载就是单位时间内的活跃进程数

(3)平均负载为多少时合理

理性状态是每个CPU刚好运行着一个进程,每个CPU都得到了充分利用,在评判平均负载时,首先通过top命令获取,或使用grep 'model name' /etc/cpuinfo
例:1)如果在4个CPU的系统上,平均负载为2时,意味着CPU有50%的空闲
2)如果在2个CPU的系统上,平局负载为2时,意味着所有的CPU都刚好占满
3)如果在1个CPU的系统上,平均负载为2时,意味着有一半的进程竞争不到CPU

平均负载有三个值,应该都关注

这三个只就像是天气一样,如果只看晚上天气,感觉在过冬天,如果结合早上、中午、晚上三个时间点的温度看,就可以了解的更全面,所以应该三个都关注
(1)如果三个值基本相同的话,那就说明平均负载是正常的
(2)1 分钟小于15 分钟的值,说明平均负载在减少,15 分钟就有很大的负载
(3)1 分钟大于15 分钟的值,说明1 分钟负载在增加,所以需要持续观察

(4)实际环境生产环境中,平均负载高时,需要重点关注

当平均负载高于70%时,应该分析排查负载高的问题,一旦负载过高,有可能导致进程响应慢,影响服务的正常功能
最好的办法就是,把系统的平均负载监控起来,然后根据更多的历史数据,判断负载变化的趋势,发现负载有明显升高时,在做分析调查

(5)平均负载与CPU使用率的关系

平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数,所以,他不仅包括正在使用的CPU进程,还包括等待CPU和等待I/O的进程
而CPU使用率,是单位时间内CPU繁忙情况下的统计,跟平均负载不一定完全对应
CPU密集型进程,使用大量CPU会导致平均负载升高,两者是一致的
I/O密集型进程,等待I/O也会导致平均负载过高,但CPU使用率不一定高
大量CPU的进程调度也会导致平均负载过高,此时的CPU使用率也会·较高

你可能感兴趣的:(day 21 进程管理(管理进程))