进程管理

文章目录

    • 三:管理进程状态 kill
    • 四:管理后台进程 screen ( 前台 后台 ) -->out ( jobs bg fg )
            • 1.了解
            • 2.screen重新打开一个窗口
    • 五:进程的优先级[进阶] nice
            • 1. 使用top或ps命令查看进程的优先级
            • 2.nice指定优先级
            • 3.renice修改优先级
    • 6.系统平均负载[进阶] load
            • 1.什么是平均负载
            • 2.可运行状态和不可中断状态是什么
            • 3.那平均负载为多少时合理
            • 4.平均负载与 CPU 使用率有什么关系

三:管理进程状态 kill

当程序运行为进程后,如果希望停止进程,怎么办呢? 那么此时我们可以使用linux的kill命令对进程发送关闭信号。当然除了kill、还有killall,pkill
kill使用pid关闭进程;killall,pkill使用进程名称关闭进程
1.使用kill -l可以查看系统所支持的信号

[root@syc~]# 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+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) 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	

虽然linux支持信号很多,但是我们仅列出我们最为常用的3个信号

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

#1.给 vsftpd 进程发送信号 1,9,15

#1.给 vsftpd 进程发送信号 1,15
[]root@syc~]# yum install vsftpd             	##安装vsftpd
[root@syc~]# systemctl start vsftpd				## 启动服务	
[root@syc~]# ps aux |grep vsftpd				##过滤服务进程号
root       2052  0.0  0.0  53284   572 ?        Ss   10:19   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftp.conf
root       2969  0.0  0.0 112728   976 pts/0    R+   16:00   0:00 grep --color=auto vsftpd
#2.发送重载信号,例如 vsftpd 的配置文件发生改变,希望重新加载
[root@syc~]# kill -1 2052						##信号1重新加载配置文件会改变子进程pid		
[root@syc~]# ps aux |grep vsftpd
root       2052  0.0  0.0  53284   756 ?        Ss   10:19   0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftp.conf
root       3009  0.0  0.0 112728   976 pts/0    S+   16:30   0:00 grep --color=auto vsftpd
#3.发送停止信号,当然vsftpd 服务有停止的脚本 systemctl stop vsftpd
[root@syc~]# kill 2052							##默认15终止进程要等到执行完任务才会关闭
[root@syc~]# ps aux |grep vsftpd
root       3011  0.0  0.0 112728   976 pts/0    R+   16:31   0:00 grep --color=auto vsftpd
#4.发送强制停止信号,当无法停止服务时,可强制终止信号
[root@syc~]# kill -9 3053

2.Linux系统中的killall、pkill命令用于杀死指定名字的进程。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killallpkill把这两个过程合二为一,是一个很好用的命令。

#1、通过服务名称杀掉进程
[root@syc~]# killall vsftpd
[root@syc~]# pkill vsftpd
#2.使用pkill踢出从远程登录到本机的用户,终止pts/0上所有进程, 并且bash也结束(用户被强制退出)
[root@syc~]# pkill -9 -t pts/0

四:管理后台进程 screen ( 前台 后台 ) -->out ( jobs bg fg )

1.什么是后台进程
通常进程都会在终端前台运行,一旦关闭终端,进程也会随着结束,那么此时我们就希望进程能在后台运行,就是将在前台运行的进程放入后台运行,这样及时我们关闭了终端也不影响进程的正常运行。
2.使用什么工具将进程放入后台
早期的时候大家都选择使用&符号将进程放入后台,然后在使用jobs、bg、fg等方式查看进程状态,但太麻烦了。也不直观,所以我们推荐使用screen。

1.了解

1.jobs、bg、fg的使用(强烈不推荐,了解即可)

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

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

[root@xuliangwei ~]# (while :; do date; sleep 2; done) & //进程在后台运行,但输出依然在当前终端
[root@xuliangwei ~]# (while :; do date; sleep 2; done) &>/dev/null &
2.screen重新打开一个窗口
		 选项:-list		查看打开的新窗口
		 	 -r加窗口id	进入窗口
		 	 -s			指定窗口名称

操作实例

#1.打开新的窗口
[root@syc~]# screen 
2.指定打开一个名字为wyk的窗口-----加大S
[root@syc~]# screen -S WYK
[root@syc~]# screen -list				##查看所有窗口--------加-list
There is a screen on:
        3285.WYK        (Attached)
1 Socket in /var/run/screen/S-root.
现在已经在新打开的wyk窗口下可以执行一个top查看进程状态,Ctrl+a+d平滑退出窗口,这个命令还会在后台运行,
就算关了终端也不会退出,也是需要exit来关闭新建的screen窗口
#2平滑的退出screen,但不会终止screen中的任务。注意: 如果使用exit 才算真的关闭screen窗口
#3进入正在运行的screen						##-r可以加id号也可以加名字进入
[root@syc~]# screen -r wyk
[root@syc~]# screen -r 3285

五:进程的优先级[进阶] nice

在启动进程时,为不同的进程使用不同的调度策略。
nice 值越高: 表示优先级越低,例如+19,该进程容易将CPU 使用量让给其他进程。
nice 值越低: 表示优先级越高,例如-20,该进程不倾向于让出CPU。 最高的优先级

低       正常      高
+20      0       -20
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
1083 root      20   0  298628   2808   1544 S  0.3  0.1   2:49.28 vmtoolsd
5    root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:+
#2.使用ps查看进程优先级
[root@m01 ~]# ps axo command,nice |grep sshd|grep -v grep
/usr/sbin/sshd -D             0
sshd: root@pts/2              0
2.nice指定优先级

语法格式 nice -n 优先级数字 进程名称

#1   
3.renice修改优先级

语法格式 renice -n 优先级数字 进程pid

#1.查看vim的进程id,名称,nice(优先级)
[root@syc~]# ps axo pid,command,nice |grep vim |grep -v grep	#查找后进行过滤
 3621 vim                         -20

#2.修改vim的优先级为-20
[root@syc~]# renice -n -20 3621
3621 (进程 ID) 旧优先级为 0,新优先级为 -20

#3.查看vim的优先级(这个过滤的是id号,什么过滤的是名字)
[root@syc~]# ps axo pid,command,nice |grep 3621
 3621 vim                         -20
 3629 grep --color=auto 3621      -20

6.系统平均负载[进阶] load

每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载情况。比如像下面这样,我在命令行里输入了 uptime 命令,系统也随即给出了结果。

[root@m01 ~]# uptime
04:49:26 up 2 days, 2:33, 2 users, load average: 0.70, 0.04, 0.05
#我们已经比较熟悉前面几列,它们分别是当前时间、系统运行时间以及正在登录用户数。
而最后三个数字呢,依次则是过去 1 分钟、5 分钟、15 分钟的平均负载(Load Average)。

平均负载不就是单位时间内的 CPU 使用率吗?上面的 0.70,就代表 CPU 使用率是 70%。其实上并不…

1.什么是平均负载
  • 平均负载是指单位时间内,系统处于 可运行状态R 和 不可中断状态D 的平均进程数,也就是平均活跃进程数
    平均负载其实就是单位时间内的活跃进程数。 ( 可运行状态R + 不可中断状态D )
    平均负载要看的是三个值(1,5,15分钟),不是一个。
2.可运行状态和不可中断状态是什么

1.可运行状态进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们ps 命令看到处于 R 状态的进程。
2.不可中断进程,(你做什么事情的时候是不能打断的?) 系统中最常见的是等待硬件设备的 I/O 响应,也就是我们 ps 命令中看到的 D 状态(也称为 Disk Sleep)的进程。

3.那平均负载为多少时合理

最理想的状态是每个 CPU 上都刚好运行着一个进程,这样每个 CPU 都得到了充分利用。所以在评判平均负载时,首先你要知道系统有几个 CPU,这可以通过 top 命令获取,或grep ‘model name’ /proc/cpuinfo

例1、假设现在在 4、2、1核的CPU上,如果平均负载为 2 时,意味着什么呢?
Q1.在4 个 CPU 的系统上,意味着 CPU 有 50% 的空闲。
Q2.在2 个 CPU 的系统上,意味着所有的 CPU 都刚好被完全占用。
Q3.而1 个 CPU 的系统上,则意味着有一半的进程竞争不到 CPU。
PS: 平均负载有三个数值,我们应该关注哪个呢?
平均负载要看的是三个值,不是一个。

4.平均负载与 CPU 使用率有什么关系

在实际工作中,我们经常容易把平均负载和 CPU 使用率混淆,所以在这里,我也做一个区分。可能你会疑惑,既然平均负载代表的是活跃进程数,那平均负载高了,不就意味着 CPU 使用率高吗?
我们还是要回到平均负载的含义上来,平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。所以,它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。

而 CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。比如:
1.CPU 密集型进程,使用大量 CPU 计算会导致平均负载升高,此时这两者是一致的; ( 视频的转码 加密 计算圆周率 )
2.I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高; 关注wa
3.大量的 CPU 进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。

  • 查看步骤:
    1.uptime看看负载的情况 ( 超过了 cpu的核心 )
    2.top看是cpu的使用率高 还是 wa等待高 还是内核态占用cpu高 、软中断高 、nice优先级进程占用cpu、
    3.top看是哪个进程
    4.追踪这个进程的情况。
    5.看看是否存在异常日志。

故障案例:
将物理机的数据库 迁移到了阿里云 配置一样
问题: 迁移过去后 发现负载很高,平常负载 1-2 4 5 的状态。
top看了一眼,发现了 wa 非常的高 达到了百分之 50-60%

物理机的磁盘的每s读写:400MB/s SAS盘
测试云主机的磁盘每s读写:100MB/s   云主机使用的都是  (SATA盘)=高效云盘  替换 SSD 云盘  300-400MB/s

如果出现无法使用mpstat、pidstat命令查看 %wait指标建议更新下软件包
rpm -Uvh http://pagesperso-orange.fr/sebastien.godard/sysstat-11.7.3-1.x86_64.rpm

你可能感兴趣的:(笔记,linux)