linux社区程序员

Linux进程

2020-01-08  本文已影响0人  linux_阿杰

概述

监控进程状态
管理进程状态
管理后台进程
进程的优先级

每天我们要守护服务器7*24小时不宕机,会使用一些命令来查看服务器运行状态,磁盘,内存等。

进程基本概述

1.什么是进程
当我们运行一个程序的时候,那么运行的程序就是一个进程
PS:当程序运行为进程后,系统会为该进程分配内存,以及进程运行的身份和权限。
PS:在进程运行的过程中,服务器上会有各种状态来表示当前进程的指标信息。

2.程序和进程的区别
程序是数据和指定的集合,是一个静态的概念,比如/bin/ls /bin/cp 等二进制文件,同时程序可以长期存在系统中。
进程是程序运行的过程,是一个动态的概念,进程是存在生命周期的,也就是说进程随着程序的终止而停止,不会永久存在系统中。

3.程序的生命周期
一个对象从无到有 从有到无的过程称为生命周期(就绪态 执行态 僵死态 停止态 睡眠态)


图片.png

当父进程接收到任务调度时,会通过fock派生子进程来处理,子进程会继承父进程衣钵(相当于完全复制一份父进程的信息)

1.子进程在处理任务代码时,父进程会进入等待状态
2.子进程在处理任务代码后,会执行退出,然后唤醒父进程来回收子进程的资源
3.如果子进程在处理任务过程中,父进程退出,子进程没有退出,子进程没有被父进程管理,则变成僵尸进程
4.每个进程都有自己的PID号,子进程称为PPID

监控进程状态

程序在运行后,我们需要了解进程的运行状态,查看进程的状态分为:静态和动态两种方式

1.使用ps命令查看当前的进程状态(静态)
ps –auxf常用组合方式查看进程、PID、占用cpu百分比,占用内存百分比,状态、执行的命令等

   -a显示所有终端机下执行的进程,除了阶段作业领导者之外
   -u以用户为主的格式来显示进程状况
   -x显示所有进程,不以终端机来区分
   -f用ASCII字符显示树状结构,表达进程间的相互关系
图片.png

标志 意义

USER    该 process 属于那个使用者账号的
PID     该 process 的号码
%CPU    该 process 使用掉的 CPU 资源百分比
%MEM    该 process 所占用的物理内存百分比
VSZ     该 process 使用掉的虚拟内存量 (Kbytes)
RSS     该 process 占用的固定的内存量 (Kbytes)
TTY     该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT    该程序目前的状态
START   该 process 被触发启动的时间
TIME    该 process 实际使用 CPU 运作的时间
COMMAND 该程序的实际指令[]内核态进程 无[] 用户进程
STAT基本状态      描述        STAT状态+符号          描述
R               进程运行           s            进程是控制进程, Ss进程的领导者,父进程
S               可中断睡眠         <            进程运行在高优先级上,S<优先级较高的进程
T               进程被暂停         N            进程运行在低优先级上,SN优先级较低的进程
D               不可中断进程       +            当前进程运行在前台,R+该表示进程在前台运行
Z               僵尸进程           l           进程是多线程的,Sl表示进程是以线程方式运行

案例1

1)在终端1运行vim
root@13k ~#: vim 1.sh
2)在终端2运行ps命令查看状态
root@13k ~#: ps aux |grep vim
root       7313  0.0  0.5 150000  5936 pts/0    S+   15:17   0:00 vim 1.sh
root       7329  0.0  0.0 112720   980 pts/1    R+   15:20   0:00 grep --color=auto vim
3)在终端1上挂起vim命令按下: ctrl+z
4)回到终端2在次运行ps命令
root@13k ~#: ps aux |grep vim    # T表示停止状态
root       7313  0.0  0.5 150000  5936 pts/0    T    15:17   0:00 vim 1.sh
root       7332  0.0  0.0 112720   984 pts/1    R+   15:21   0:00 grep --color=auto vim

案例2

ps命令查看不可中断状态进程
使用tar打包文件时,可以通过中断不断查看状态,由S+,R,D+来回切换
root@13k ~#: ps aux|grep tar|grep -v grep
root       7344 22.6  0.1 124276  1980 pts/0    R+   15:28   0:02 tar zcvf all.tar.gz /etc /var /usr
root@13k ~#: ps aux|grep tar|grep -v grep
root       7344 25.4  0.1 124276  1980 pts/0    S+   15:28   0:02 tar zcvf all.tar.gz /etc /var /usr
root@13k ~#: ps aux|grep tar|grep -v grep
root       7344 23.1  0.1 124276  1980 pts/0    S+   15:28   0:02 tar zcvf all.tar.gz /etc /var /usr
root@13k ~#: ps aux|grep tar|grep -v grep
root       7344 19.7  0.1 124244  1980 pts/0    D+   15:28   0:02 tar zcvf all.tar.gz /etc /var /usr

2.使用top 命令查看当前进程状态 动态


图片.png
任务                        含义
Tasks:73 total          当前进程的总数
2 running               正在运行的进程数
71 sleeping             睡眠的进程数
0 stopped               停止的进程数
0 zombie                僵尸进程数
%Cpu(s):  49.2 us       系统用户进程使用CPU百分比
5.7 sy                  内核进程占用CPU百分比,内核是于硬件进行交互
ni                      优先调度进程占用CPU的时间
45.2 id                 空闲CPU的百分比
0.0 wa                  CPU等待IO完成的时间
0.0 hi                  硬中断,占的CPU百分比
0.0 si                  软中断,占的CPU百分比
0.0 st                  比如虚拟机占用物理CPU的时间

什么是中断?
中断就是终止当前在做的事情 去执行另一段程序
会保留现场,执行的那段程序做完之后会在回来执行刚来尚未完成的部分


图片.png

生活场景解释中断
比如你在打王者正在关键时刻,突然传来了敲门声,你的快递到了,于是不情愿的去开门取快递,取完快递回来继续打王者
上面的场景打王者是一个过程的话,那么快递和一些其他的突发事件让这个过程在中间发生停顿或故障断开,就是活生生的中断
这个场景,你是唯一具有处理能力的主体,不管是打王者是取快递,同一个时间点上只能干一件事情,但在专心干一件事情时,总有许多紧迫或不紧迫的事情突然出现在面前,都需要去关注,有些还需要停下手头的工作马上去处理,只有处理完之后,方能晖投资完成先前的任务,把打王者做完
在你有生之年都不希望打游戏过程被打断,于是给快递提前定了时间,几点送到-这就是软中断
跟人类似,CPU也要面对这样复杂的局面,意外是无处不在的-有可能是用户等的不耐烦,猛敲键盘,有可能网卡突然接收到一个新的数据库包,这些都是需要CPU具体情况具体分析,要么马上处理,要么暂缓响应,无论如何应对,都需要CPU暂停手头的工作,拿出一种对策,只有在响应之后,方能回头完成先前的使命 有了中断CPU才有并行处理能力
中断了解即可

软中断和硬中断的区别

                           软中断                 硬中断
是否有随机性 突发性            否                     是
是否有中断响应周期             无                     是
中断类型号的提供方法      固定或由指令提供          由中断控制器提供

top
top的升级命令 htop iotop iftop
yum htop iotop iftop install -y

h   # 查看帮助
1   # 数字1,显示所欲偶CPU核心的负载
z   # 以高亮显示数据
b   # 高亮显示处于R状态的进程
M   # 按内存使用百分比排序输出
P   # 按照CPU使用百分比排序输出
q   # 退出top

管理进程状态

当程序运行为进程后,如果希望停止进程,怎么办呢?那么此时我们可以使用linux的kill命令对进程发送关闭新号,当然除了kill 还有killall pkill

使用kill –l列处当前系统所支持的信号


图片.png

虽然Linux信号很多,但是我们仅仅使用最常用的3个信号

1)SIGHUP 重新加载配置文件             1
2)SIGKILL 强制杀死进程               9
3)SIGTERM 终止进程,默认kill使用该信号 15

[root@13k ~]# ps axu|grep nginx    
root     15688  0.0  0.1  87384  1132 ?        Ss   12:19   0:00 nginx: master process /usr/sbin/nginx
nginx    15689  0.0  0.3  89096  3176 ?        S    12:19   0:00 nginx: worker process
root     15691  0.0  0.0 112660   968 pts/3    R+   12:19   0:00 grep --color=auto nginx
# 发送重新加载信号 nginx配置文件发生改变,可用此重新加载
[root@13k ~]# kill -1 15688
[root@13k ~]# ps axu|grep nginx
nginx    15692  0.0  0.3  89376  3648 ?        S    12:19   0:00 nginx: worker process
root     15722  0.0  0.0 112660   968 pts/3    R+   12:20   0:00 grep --color=auto nginx
发送停止信号 kill pid
[root@13k~]# kill 15692
强制终止服务
kill -9 15692
2.Linux系统中killall,pkill命令用于杀死指定名字的进程,我们可以使用kill命令杀死指定进程的PID的进程,killall和pkill直接杀进程而不需要查pid
[root@13k ~]# killall nginx
[root@13k ~]# pkill nginx
使用pkill踢出从远程登录到本机的用户,终止pts1上所有进程,用户强制退出
[root@13k~]# pkill -9 -t pts/1

管理后台进程

1)什么是后台进程
他你刚才进程读会在终端前台运行,一旦关闭终端,进程随着结束,此时希望进程在后台运行不退出,这样关闭终端也不影响进程的正常运行
2)如何把程序放在后台

# 把进程放入后台运行 使用 &
[root@13k ~]# sleep 3000 &
[1] 15909
# 把进程挂起放在后台
[root@13k ~]# sleep 4000
^Z
[3]+  Stopped                 sleep 4000 
# jobs 显示在后台运行的程序
[root@13k ~]# jobs 
[1]-  Running                 sleep 3000 &
[2]+  Running                 sleep 4000 &
# 让作业2在后台运行
[root@13k ~]# bg %2
[2]+ sleep 4000 &
[root@13k ~]# jobs 
[1]-  Running                 sleep 3000 &
[2]+  Running                 sleep 4000 &
将作业1掉回到前台运行
[root@13k ~]# fg %1
sleep 3000
# 终止后台PID为2的进程
[root@13k ~]# kill %2
[root@13k ~]# jobs   
[1]+  Stopped                 sleep 3000
[2]-  Terminated              sleep 4000
# & 后台运行
for i in {1..10};do echo $i;done &   # 内容还是输出到屏幕
for i in {1..10};do echo $i;done &>/dev/null & # 内容定向到空

screen的使用 常用
1)安装
yum –y install screen

  1. 使用方法
    screen 指定一个任务名称后进入到一个新bash中
  screen -S wget_jenkins

# 在新bash中执行一条下载命令

wget  https://pkg.jenkins.io/redhat-stable/jenkins-2.190.1-1.1.noarch.rpm

# 平滑退出screen 不会终止任务,如果使用exit则退出

ctrl+a+d   # 平滑退出screen任务

# 查看正在运行的screen有哪些任务

[root@13k ~]# screen -list

There is a screen on:

        43698.wget_jenkins      (Detached)

1 Socket in /var/run/screen/S-root.

进入正在执行的screen任务中 或者使用PID即可进入

[root@13k ~]# screen -r wget_jenkins

进程的优先级

1) 在启动进程时,为不同的进程使用不同的调度策略

nice 值越高 表示优先级越低,例如+19 该进程容易将CPU使用量让给其他进程

nice值越低 表示优先级越高,例如-20, 改进程更不倾向于让出CPU

使用top或ps命令查看进程的优先级

使用top可以查看nice优先级 NI:实际nice级别,默认是0 动态修正CPU调度。范围(-20~19)。越大,cpu调度越一般,越小,cpu调度越偏向它。一般用于后台进程,调整也是往大了调,用来给前台进程让出CPU资源

PR: 优先级 显示nice值,PR默认是20,越小,优先级越高。修改nice可以同时修改PR -20映射到0, +19映射到39

图片.png

2)nice指定程序的优先级,语法格式nice -n 优先级数字 进程名称
开启vim并指定程序优先级为-5 并查看进程优先级


图片.png

renice命令修改一个正在运行的进程优先级,语法格式 renice –n 优先级数字 进程 pid

1)查看sshd进程当前的优先级状态
[root@lzy ~]# ps axo pid,command,nice|grep sshd
  1114 /usr/sbin/sshd -D             0
 30865 sshd: root@pts/0              0
  1. 调整sshd主进程的优先级
[root@13k ~]# renice -n -20 1114
1114 (process ID) old priority 0, new priority -20
exit 退出当前bash
登陆查看调整或的优先级 再次登陆后会由主进程fork子进程 子进程会继承主进程的优先级
[root@13k ~]# ps axo pid,command,nice|grep sshd
  1114 /usr/sbin/sshd -D           -20
 43747 sshd: root@pts/0            -20
 43770 grep --color=auto sshd      -20
上一篇下一篇

猜你喜欢

热点阅读