day19 进程管理

day19 进程管理

1.什么是进程,什么是线程

1.什么是程序
  一般情况下,代码,安装包等全部都是应用程序。
2.什么是进程
  应用程序运行起来能够提供某种服务的实例
  进程是资源分配的最小单位,指的是程序的运行过程,是对正在运行的程序的一个抽象。
3.什么是线程
进程中处理具体事务的东西。每个进程都有一个地址空间,而且默认就有一个控制线程。线程才是cpu上的执行单位。
线程是CPU调度的最小单位。
一个进程中,至少有一个线程,可以有多个线程(多线程)
 

2.进程的三种状态

image-20211013170036651

 

 

 

就绪态:应用程序在等待cpu处理的时候就是就绪态
运行态:当cpu正在处理应用程序的时候就是运行态
阻塞态:当cpu运行完毕之后,应用程序随即进入阻塞态。(正在执行的进程由于某种原因而暂时无法继续执行)
echo ”1+1“|bc

3.查看进程(ps)

ps是获取当前系统进程的命令
-a    #显示一个终端的所有进程
-u    #选择有效的用户id或者是用户名
-x    #显示没有控制终端的进程,同时显示各个命令的具体路径

-aux  #一般情况下是一起使用,相同的参数组合还有一个-ef参数

-ef和-aux之间的区别?
  -ef :会打印出父级PID
  -aux :会打印出cpu、内存相关的使用情况

4.PS详解

 

[root@localhost ~]# ps -aux
USER       PID %CPU %MEM   VSZ   RSS TTY     STAT START   TIME COMMAND
root          1  0.0  0.4  43664  4036 ?       Ss   08:20   0:01 /usr/lib/systemd

PS详解:
USER   :指的是运行当前进程的用户
PID     :进程的编号(ID)
%CPU   :CPU的占用率(指的是单位时间内占用CPU的时间比)
%MEM   :内存的占用率
VSZ     :应用程序向系统申请的内存(虚拟内存)占用虚拟内存,单位:kb(killobytes)
VSZ是指已分配的线性空间大小,这个大小通常并不等于程序实际用到的内存大小,产生这个的可能性很多
比如内存映射,共享的动态库,或者向系统申请了更多的堆,都会扩展线性空间大小。

RSS     :应用程序实际使用的内存大小,
      RSZ是Resident Set Size,常驻内存大小,即进程实际占用的物理内存大小
TTY     :进程运行的终端(?代表后台运行,也就是说不占用任何终端)
      tty终端:操作系统的终端
      pts终端:虚拟终端    
STAT   :进程的状态 man ps (/STATE)    
      R :正在运行状态(正在使用CPU)
      S : 可中断睡眠 Sleep,即在睡眠的过程中可以接收信号唤醒=》执行的IO操作可以得到硬件设备的响应
      D : 不可中断睡眠,即在睡眠的过程中不可以接受信号唤醒==》执行的IO操作得不到硬件设备的响应。
      T : 停止的进程
      Z : 僵尸进程
      X : 死掉的进程(几乎看不到,因为死了就立即回收)
      < : 标注了<小于号代表优先级较高的进程
      N :N代表优先级较低的进程
      s : 包含子进程
       + :+表示在前台运行的进程(前台运行就是指在命令行中运行)
      l :小写字母l,代表以线程的方式运行,即多线程
      | :管道符号代表多进程
     
    知识储备:nice 设置进程的优先级
               -n:设置具体的进程优先级
               -20~20:数字越大优先级越小
              [root@localhost ~]# nice -n -19 sleep 100   #优先级较高
              [root@localhost ~]# ps -aux
              root       1407  0.0  0.0 108052   352 pts/0   S<+  19:03   0:00 sleep 100
               
START   :进程的启动时间
TIME   :进程占用CPU的总时间
COMMAND :进程文件,进程名
      带[]号的代表内核态进程
  不带[]号的代表用户态进程

5.top命令-实时查看进程的命令

5.1基本参数
默认情况下,top命令是3秒刷新一次
-d :指定刷新的频率
-p:查看指定进程的信息
-u:查看指定用户的进程
-n:查看指定top次数的信息

[root@localhost ~]# top     #实时查看进程的命令
[root@localhost ~]# top -d 1 #1秒刷新一次
[root@localhost ~]# top -d 1 -p 进程的pid
[root@localhost ~]# top -d 1 -p `pgrep nginx | head -1`
[root@localhost ~]# top -d 1 -p `pgrep sshd | head -1`,33 # 查看sshd以及pid为33的进程
[root@localhost ~]# top -d 1 -u nginx # 查看指定用户进程
[root@localhost ~]# top -d -n 2 > top.txt # 将2次top信息写入到文件
5.2系统整体统计信息

image-20211013154843547

 

 

top - 13:52:06 up  5:31,  2 users,  load average: 0.00, 0.01, 0.02
Tasks:  84 total,   1 running,  83 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   995684 total,   841816 free,    81264 used,    72604 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   802900 avail Mem

  PID USER     PR NI   VIRT   RES   SHR S %CPU %MEM     TIME+ COMMAND      
    1 root      20   0   43664   4036   2556 S  0.0  0.4   0:01.09 systemd    
详解
up :启动
down:停止
load average :系统负载 (什么是系统负载:单位时间内,系统进程占用cpu的相对时间)
up左边的代表的是当前的时间
up右边代表运行了多长时间
load average: 0.00, 0.01, 0.02 CPU 1分钟 5分钟 15分钟平均负载
us:用户态进程占用CPU时间的百分比
sy :内核态进程占用CPU时间的百分比
ni :代表优先被调度的进程占CPU时间的百分比
id cpu:空闲的百分比
wa cpu :等待io的百分比
hi :硬件中断,处理硬件中断所占用的cpu的时间
si :软件中断,处理软件中断所占用的cpu的时间
st :被偷走的cpu
5.3进程信息

image-20211013160845219

 

 

PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND      
    1 root      20   0   43664   4036   2556 S  0.0  0.4   0:01.10 systemd
   
详解:
VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量

RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out(当某进程向OS请求内存发现不足时,OS会把内存中暂时不用的数据交换出去,放在SWAP分区中,这个过程称为SWAP OUT。当某进程又需要这些数据且OS发现还有空闲物理内存时,又会把SWAP分区中的数据交换回物理内存中,这个过程称为SWAP IN)
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小

SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来,因为内存充裕了,大家就没必要合租内存了

DATA
1、数据占用的内存。如果top没有显示,按f键、然后用空格选中DATA项目、然后按q则可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。
5.4 top运行中可以通过top的内部命令对进程的显示方式进行控制
P   按CPU使用排序
N 以PID的大小排序
R 对排序进行反转
f 自定义显示字段(按f,然后选中要显示的字段按空格键)
1 显示所有CPU的负载
s 改变画面更新频率
1 展开CPU详情
m 改变内存的显示样式

h|?帮助
< 向前
> 向后
z 彩色
5.5进程信号
5.51.什么是信号
  简而言之,操作系统告诉进程怎么做,做什么的一种沟通方式。
5.52.kill命令

kill就是发送信号的命令
[root@localhost ~]# 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

 

 

image-20211013162831723

image-20211013201727164

5.53.HUP信号——重载,终端断线

id ;1
完整的名字:SIGHUP
作用: 更新进程的配置
5.54.INT、QUIT和TSTP 终止信号(无法使用kill命令来调用)
INT信号(中断)就是ctrl+c   停止进程(我让你死,死不死,死,自己死)
QUIT信号(退出)就是ctrl+\ 终止进程(我让你死,怎么死,我一刀砍死)
TSTP信号就是ctrl+z 终断信号(断部队的粮草,抽掉内存)
5.55.KILL和TERM 杀死信号(可以使用kill命令来调用)
KILL  :杀死信号(直接一刀砍死,直接回收内存,强制剥离cpu)
TERM :终止信号(自己去死,优雅的死)

[root@localhost nginx]# echo $$
1382
[root@localhost nginx]# ps -ef |grep 1382
root 1382 1380 0 19:58 pts/1 00:00:10 -bash
root 1472 1382 0 20:30 pts/1 00:00:00 ps -ef
root 1473 1382 0 20:30 pts/1 00:00:00 grep --color=auto 1382
5.56.CONT和STOP 恢复和暂停
CONT  恢复
STOP 暂停

知识储备:
$$ :打印当前进程的PID
KILL -9 pid
kill -s SIGKILL pid

[root@localhost ~]# vim 1.sh
[root@localhost ~]# cat 1.sh
echo $$
while true;do ((1+1));done
[root@localhost ~]# ./1.sh
1477
[root@localhost ~]# ps -aux
[root@localhost ~]# kill -19 1477
[root@localhost ~]# ps -aux
5.6.查看网络状态

安装网络调试工具
[root@localhost ~]# yum install net-tools

ipv4 和 ipv6
[root@localhost ~]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1308/sshd
tcp6 0 0 :::22 :::* LISTEN 1308/sshd


参数:

-t :tcp协议
-u:udp协议
-l:listen
-p:显示PID/Program name
-n:不反解,不将ip地址解析为主机名,不将端口解析成协议名(80 ---> http)

 

5.7.僵尸进程和孤儿进程

僵尸进程:
特征:1.进程
2.进程生命周期已经结束
3.进程依然占着pid不释放
0-65535
pid的数量可以修改
一旦pid被使用完毕,则无法再启动其他进程

孤儿进程:
1.孤儿进程的父进程已经结束而子进程还在运行
2.在父进程没有的情况下被操作系统进程(pid=1)接收

 

 

 

 

 

 

 

 

 

posted @ 2021-10-13 20:44  甜甜de微笑  阅读(65)  评论(0编辑  收藏  举报