管理进程状态--24

要想让进程运行起来,必须要有一个程序。
所以进程:就是一堆的命令+参数+执行的程序

kill (就是干掉进程。让他停止运行)
-1 -HUP 加载服务的配置,主进程不会重新启动,但是子进程会被干掉,重新拉起新的子进程


Xnip2020-04-08_22-45-34.jpg

-9 强制杀死,谨慎使用。(比如我正在往磁盘写数据,然后你强制杀掉了进程,就会导致进程的中断,而导致数据不完整,更可能会导致程序启动不起来)


Xnip2020-04-08_22-55-35.jpg

成为孤儿进程之后,就不能在提供服务了。
Xnip2020-04-08_23-00-56.jpg
-15     正常停止进程信号,如果进程还有任务在处理,那么则处理完成后,进程会自动退出。
Xnip2020-04-08_22-48-13.jpg

pkill +进程名字 pkill httpd
killall killall httpd

问题:在linux中输入如下命令"(while :; do uptime; sleep 1; done) &" ,新开一个终端查看该进程的状态,并尝试终止该进程。

输入之后,会出现一秒一次的动态进程。不能暂停。也找不到它的pid。所以只能pkill -9  -t pts/0 ,直接把登录终端的用户给强制踢出。

后台进程
通常进程都是在终端的前台运行,但是一旦关闭终端。进程也会随之结束。那么这个时候,我们希望它能在后台运行。达到就算我们退出了终端,他也能正常的运行
(就像qq的最小化。我最小化之后,就把它放在了后台,然后并不影响我在前台做其他的事。)

为啥要把进程放在后台呢?
因为当我们在传输一个大数据的时候,需要时间,而这个时候我们刚好要去吃饭,就可以直接把它放着,但是电脑会在一段时间不用之后,进入到一个休眠的状态,这个时候,会断网而导致进程中断,而导致Linux数据的传输失败。

怎么解决?
例如:查看日志记录tail -f /var/log/messages
古老的办法:tail -f /var/log/messages & (放在了后台)
jobs (查看后台作业)
fg 数字 (回到前台)
然后在ctrl +c 退出。
但是这样做,会出现在你登录一个窗口会退出时。会把信息显示到你的前台。
然后出了一个办法:tail -f /var/log/messages &>>/tmp/1.txt &
将执行的后台的结果追加到一个文件中。然后执行。这样不会出现在出现在前台提示。

现在的神器高科技:
screen 原理图()


Xnip2020-04-08_23-32-10.jpg

screen -S wget_mysql (创建一个窗口,指定名称)
进入窗口执行任务,不管是传输还是什么
使用ctrl+a+d (平滑的退出),相当于将窗口挂在了后台。但是如果你使用了exit命令,相当于你退出了窗口,就再也进不去了
screen -list 查看正在运行的screen有哪些
screen -r wget_mysql 或screen -r IP号 重新进去到窗口。

进程的优先级?
就是优先享受资源。比如排队买票的时候,都是老人,军人优先。
为啥要有优先级?
很简单,我需要得到别人不同的待遇。cpu在同一时间只能处理一个任务,而它的任务过多,或者时间过长,我在输入自己想输入的命令时就会排队,比如ssh,进入远程的窗口。那么我如果没有优先待遇,就会很难得到回复。

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

低 正常 高
+20 0 -20

那如何配置进程的优先级?

  1. nice指定程序的优先级。语法格式 nice -n 优先级数字 进程名称
    nice -n -5 vim & 直接配置优先级
    ps aux |grep vim 查看优先级

  2. renice命令修改一个正在运行的进程优先级。语法格式 renice -n 优先级数字 进程pid
    ps -ef |grep ssh 过滤出自己想要调整的进程
    renice -n -20 26259 修改优先级
    ps axo pid,command,nice |grep ssh 过滤只查看的内容
    退出重新登录,就会使得父进程分配一个优先级。 23750 sshd: root@pts/1 -20 26259 /usr/sbin/sshd -D -20

如何处理假死的现象?


Xnip2020-04-09_00-21-20.jpg

平均负载:
平均负载是指单位时间内,系统处于 可运行状态R 和 不可中断状态D 的平均进程数,也就是平均活跃进程数,
平均负载其实就是单位时间内的活跃进程数。 ( 可运行状态R + 不可中断状态D )

 理想的平均负载?
 每一个cpu上都刚好运行着一个进程,这样每个cpu都得到充分利用。而判定平均负载,首先要知道自己的系统有几个cpu。通过top 1 获取。。也可以grep "model name"/proc/cpuinfo

当你在4,2,1核的cpu上,平均负载如果是2,意味着?
在4个cpu系统上,意味着有百分之五十点空闲
在2个cpu系统上,意味着有百分之百的刚好完全占用
在1个cpu系统上,意味着有一半的进程竞争不到cpu,导致电脑卡

怎么看平均负载?
要三个值一起看
1.如果三个值相差不大,证明没问题
2.如果1分钟的值远小于15分钟。 证明负载在减小
3.如果1分钟的值远大于15分钟。证明负载在这个时候突然上升
也可以通过计算的方法:


image.png

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

平均负载和cpu的使用率有啥关系
CPU 密集型进程,使用大量 CPU 计算会导致平均负载升高,此时这两者是一致的; ( 视频的转码 加密 计算圆周率 )
I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高; wa
大量的 CPU 进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。

cpu密集进程,用户进程飙升。
[root@fanxiaolei ~]# stress --cpu 1 --timeout 600 (模拟大量用户进程访问,造成us飙升)
然后通过top查看。
watch -d uptime (如果负载过高,会高亮显示)
mpstat -P ALL 5 (查看cpu的使用率变化情况)
(表示监控所有cpu,数字5是,5秒输出一组数据)
pidstat -u 5 1 (查看哪个进程导致的cpu使用率高)

I/O 密集型进程
[root@fanxiaolei ~]# stress --io 1 --timeout 600

大量的cpu 进程的调度
[root@fanxiaolei ~]# stress -c 4 --timeout 600

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.管理进程状态 当程序运行为进程后,如果希望停止进程, 那么此时我们可以使用linux的kill命令对进程发送关...
    但若归去若已晚阅读 3,474评论 0 0
  • 1.管理进程状态 当程序运行为进程后,如果希望停止进程, 那么此时我们可以使用linux的 kill 命令对进程发...
    记不住的悔阅读 3,203评论 0 0
  • 1.管理进程的状态 当程序运行为进程后,如果希望进程停止,怎么办呢?那么此时我们可以使用Linux的kill命令对...
    康酱呦阅读 1,716评论 0 0
  • 1.管理进程状态 当程序运行为进程后,如果希望停止进程,怎么办呢? 那么此时我们可以使用linux的kill命令对...
    爱可耐九卿阅读 2,615评论 0 1
  • 一、管理进程状态 当程序运行为进程后,如果希望停止进程,怎么办呢? 那么此时我们可以使用linux的kill命令对...
    风铃科技阅读 2,394评论 2 0