跨行学Linux运维 系统进程

进程基本概述

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

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iSqqwxRE-1616648156721)(en-resource://database/556:1)]

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

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

监控进程状态

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

1.使用ps命令查看当前的进程状态(静态)

ps的使用

ps –auxf常用组合方式查看进程、PID、占用cpu百分比,占用内存百分比,状态、执行的命令等

参数解释
-a显示所有终端机下执行的进程,除了阶段作业领导者之外
-u以用户为主的格式来显示进程状况
-x显示所有进程,不以终端机来区分
-f用ASCII字符显示树状结构,表达进程间的相互关系
[root@heng ~]# ps -auxf
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          2  0.0  0.0      0     0 ?        S    16:36   0:00 [kthreadd]
root          4  0.0  0.0      0     0 ?        S<   16:36   0:00  \_ [kworker/0:0H]
root          5  0.0  0.0      0     0 ?        S    16:36   0:00  \_ [kworker/u256:0]
root          6  0.0  0.0      0     0 ?        S    16:36   0:00  \_ [ksoftirqd/0]
root          7  0.0  0.0      0     0 ?        S    16:36   0:00  \_ [migration/0]
root          8  0.0  0.0      0     0 ?        S    16:36   0:00  \_ [rcu_bh]
root          9  0.0  0.0      0     0 ?        R    16:36   0:01  \_ [rcu_sched]
root         10  0.0  0.0      0     0 ?        S<   16:36   0:00  \_ [lru-add-drain]
root         11  0.0  0.0      0     0 ?        S    16:36   0:00  \_ [watchdog/0]
root         13  0.0  0.0      0     0 ?        S    16:36   0:00  \_ [kdevtmpfs]
标志意义
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@lzy ~]# vim test

2)在终端2上运行ps命令查看状态

[root@lzy ~]# ps axu|grep test  #S表示睡眠模式 +表示前台运行
root     14240  0.1  0.5 151868  5676 pts/1    S+   10:48   0:00 vim test
root     14271  0.0  0.0 112660   968 pts/2    R+   10:48   0:00 grep --color=auto test

3)在终端1上挂起vim命令按下: ctrl+z
4) 回到终端2再次运行ps命令查看状态

root@lzy ~]# ps axu|grep test   # T表示停止状态	  
root     14240  0.0  0.5 151868  5676 pts/1    T    10:48   0:00 vim test
root     14279  0.0  0.0 112660   964 pts/2    R+   10:51   0:00 grep --color=auto test

案例2
PS命令查看不可中断状态进程

使用tar打包文件时,可以通过中断不断查看状态,由S+,R+变为D+

[root@lzy ~]# ps axu|grep tar|grep -v grep

root     14289  2.6  0.1 124268  1888 pts/2    S+   10:56   0:01 tar zcf etc.tar.gz 
/etc/ /usr/ /var

[root@lzy ~]# ps axu|grep tar|grep -v grep

root     14289  2.7  0.2 124380  2240 pts/2    R+   10:56   0:01 tar zcf etc.tar.gz 
/etc/ /usr/ /var

 [root@lzy ~]# ps axu|grep tar|grep -v grep

root     14289  2.9  0.2 124916  2724 pts/2    D+   10:56   0:01 tar zcf etc.tar.gz 
/etc/ /usr/ /var
  1. 使用top命令查看当前的进程状态 动态
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qoZu2Hig-1616648156724)(en-resource://database/557:1)]
任务含义
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 waCPU等待IO完成的时间
0.0 hi硬中断,占的CPU百分比
0.0 si软中断,占的cpu百分比
0.0 st比如虚拟机占用物理CPU的时间

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4VylTYLj-1616648156726)(en-resource://database/555:1)]

top的使用

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

管理进程状态

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

kill 的使用

1.使用kill -l 列出当前系统所支持的信号
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vAaOOiKE-1616648156730)(en-resource://database/554:1)]

虽然Linux信号很多,但是我们仅仅使用最常用的3个信号
1、SIGHUP重新加载配置文件 -1
2、SIGKILL强制杀死进程 -9
3、SIGTERM终止进程 ,默认kill使用该信号 -15

[root@lzy ~]# 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@lzy ~]# kill -1 15688
[root@lzy ~]# 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@lzy ~]# kill 15692

强制终止服务
kill -9 15692

2.Linux系统中killall,pkill命令用于杀死指定名字的进程,我们可以使用kill命令杀死指定进程的PID的进程,killall和pkill直接杀进程而不需要查pid
[root@lzy ~]# killall nginx
[root@lzy ~]# pkill nginx
使用pkill踢出从远程登录到本机的用户,终止pts1上所有进程,用户强制退出
发现不认识的远程连接
[root@lzy ~]# pkill -9 -t pts/1

管理后台进程

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

2) 如何把程序放在后台

# 把进程放入后台运行 使用 &
[root@lzy ~]# sleep 3000 &
[1] 15909
# 把进程挂起放在后台
[root@lzy ~]# sleep 4000
^Z
[3]+  Stopped                 sleep 4000 [root@lzy ~]# 
# jobs 显示在后台运行的程序
[root@lzy ~]# jobs 
[1]-  Running                 sleep 3000 &
[2]+  Running                 sleep 4000 &
# 让作业2在后台运行
[root@lzy ~]# bg %2
[2]+ sleep 4000 &
[root@lzy ~]# jobs 
[1]-  Running                 sleep 3000 &
[2]+  Running                 sleep 4000 &
#将作业1掉回到前台运行
[root@lzy ~]# fg %1
sleep 3000
# 终止后台PID为2的进程
[root@lzy ~]# kill %2
[root@lzy ~]# 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

2) 使用方法
#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@lzy ~]# screen -list
There is a screen on:
        43698.wget_jenkins      (Detached)
1 Socket in /var/run/screen/S-root.

#进入正在执行的screen任务中 或者使用PID即可进入
[root@lzy ~]# screen -r wget_jenkins

## nohup的使用    常用经常用
nohup sh 1.sh &   #不挂断地运行命令
使用nohup来运行程序 默认会在当前运行的路径生成一个nohup.out 输出文件
*/5 * * * * > /data/scripts/nohup.out

进程的优先级

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

使用ps查看进程优先级

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

#####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
2) 调整sshd主进程的优先级
[root@lzy ~]# renice -n -20 1114
1114 (process ID) old priority 0, new priority -20
exit 退出当前bash
登陆查看调整或的优先级 再次登陆后会由主进程fork子进程 子进程会继承主进程的优先级
[root@lzy ~]# 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

测试环境可修改ssh的优先级为-20 等级高
当某个进程持续占用cpu 导致负载过高 从而导致ssh无法连接
线上环境---->给用户提供服务
nginx----> 占用cpu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值