12.进程管理与作业调度

本文详细介绍了进程的基本概念,如进程的状态、查看方法(ps,top,pstack,pstree),进程的优先级调整(nice,renice),进程的终止与调度(kill,nohup,fg,bg,daemon),以及守护进程的特性。
摘要由CSDN通过智能技术生成

12.1 进程概述

进程: 进⾏中的程序
程序和进程之间的关系
程序 ---- 静态 (程序员书写代码)--- 存储在硬盘中,没有被加载进内存
进程 ---- 动态 (运⾏了程序 - 程序被加载进⼊到了内存) 进⾏中的程序
进程区分前台和后台
1.进程查看
2.终⽌进程
3.进程前台后台调

进程查看:
ps aux
ps -ef
ps -le
pstack
pstree -a/-p

12.2 进程查看 - BSD (Linux)

1.判断系统中运⾏进程数量
2.判断服务器运⾏健康状态

ps    (process show) -  Unix   ( -> AT&T System-v | BSD)

不同⽤户有不同ps使⽤习惯

ps BSD 用法
ps linux / GNU ⽤法

[clh@localhost ~]$ ps aux | head -2 
USER        PID  %CPU %MEM    VSZ   RSS   TTY   STAT START  TIME     COMMAND
root             1        0.0       0.3    193972  7028   ?       Ss   00:18      0:05  /usr/lib/systemd/systemd --switched-root --system --deserialize 22

USER    PID  %CPU   %MEM   VSZ     RSS    TTY   STAT  START   TIME      COMMAND
root         1      0.0          0.3      193820  7008     ?        Ss     00:18       0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22

USER - 该进程的所有者
PID -     进程ID process ID
%CPU   物理CPU百分⽐利⽤率
%MEM  物理内存百分⽐利⽤率
VSZ       Virtualmemory SiZe  虚拟内存大小 - 使用量(KB)
RSS       固定驻留物理内存量   KB
TTY        该进程所在的终端 (? 该进程直接通过内核产⽣,不是通过终端方式产生)
STAT      进程状态 (重要状态 R/S/D/T/Z)
START   该进程启动时间
TIME      该进程占⽤CPU时间分⽚
COMMAND   产⽣该进程时所使⽤的命令

ps BSD 用法

ps aux # 查看系统进程
     a : 显示所有前台进程
     x : 显示所有没有控制终端的后台进程
     u : 以进程产⽣者的格式显示运⾏状态

12.3 进程状态 process state

#* 进程必须监听信号 (特殊进程除外)
#* 进程分 - 父进程-子进程 ,正常情况 , 父进程关闭后,子进程会自动关闭
#* 进程区分优先级
#* 进程申请资源最小单位 , 一个进程分为多个线程, 一个进程内的多个线程共享当前进程的资源

#进程状态   

PROCESS STATE CODES
R :       该进程正在CPU上执⾏,或者正在等待执⾏
T :        进程被暂停,该进程可以通过接收内核发送信号继续恢复执⾏
Z :     僵尸进程 ,父进程关闭后,子进程没有⾃动关闭 。
X :     僵尸进程进程被父进程正常关闭彻底释放。 僵尸进程正常退出
s(⼩) :领导者进程,在该进程下包含子进程
< :     高优先级进程
N :    低优先级进程
+ :     该进程位于后台
l(⼩) :该进程包含了多个线程

# 睡眠状态
S : 普通睡眠 sleeping , 可以被唤醒/激活
D : 不可中断的睡眠内存, 不可以被唤醒/激活
K : 该进程如果处于任务等待中时可以被唤醒/激活
I: D - ⼦状态 , 内核不统计I状态的负载平均值

12.4 进程查看 - System-v-Unix (Linux)

ps -ef
-e 查看所有进程
-f 全部信息输出 ful

[clh@localhost ~]$ ps -ef | head -2
UID         PID   PPID  C STIME   TTY   TIME         CMD
root          1      0        0    00:18    ?      00:00:05   /usr/lib/systemd/systemd --switched-root --system --deserialize 22

UID 进程所有者
PID 进程ID
PPID 表示当前子进程的父ID
C 物理CPU百分⽐利⽤率
STIME 该进程启动时间
TTY 该进程所在的终端 (? 该进程直接通过内核产⽣,不是通过终端⽅式产⽣)
TIME 该进程占⽤CPU时间分⽚ CMD 产⽣该进程时所使⽤的命令

[root@centos7 ~]# pstack 61883 # 查看进程内的线程数量,线程内函数运⾏状态 (代码)
[root@centos7 ~]# pstree #查看进程树
[root@centos7 ~]# pstree -a #查看进程树同时查看详细信息
[root@centos7 ~]# pstree -p #查看进程树同时查看进程ID

12.5 进程查看 - Linux原生

ps -le
-e 查看所有进程
-l 全部信息以长格式输出

[clh@localhost ~]$ ps -ef | head -2
UID    PID  PPID  C STIME TTY     TIME       CMD
root     1      0       0   00:18    ?        00:00:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
[clh@localhost ~]$ ps -le | head -2
F  S  UID  PID  PPID  C PRI  NI ADDR   SZ     WCHAN  TTY     TIME       CMD
4  S   0      1      0       0  80    0      -       48493  ep_pol           ?        00:00:05     systemd

F     内核为进城分配到的标记
S     process state 进程状态

UID 进程所有者UID
PID 进程ID
PPID 表示当前⼦进程的⽗ID
C     物理CPU百分⽐利⽤率
PRI - 进程优先级,数值越小-优先级越高,进程优先级越高进程越优先执行
NI - Nice 调整进程优先级的修正量, 通过该参数决定进程优先级
ADDR 进程的内存地址 -
SZ 假如该进程需要进⾏SWAP交换,需要多大的交换空间- KB
WCHAN  该进程在进⼊到睡眠状态下所使用函数

TTY         该进程所在的终端 (? 该进程直接通过内核产生,不是通过终端⽅式产生)
TIME       该进程占⽤CPU时间分⽚
CMD 产⽣该进程时所使⽤的命令

12.6 进程动态查看

top命令

[clh@localhost ~]$ top          # 动态查看进程
[clh@localhost ~]$ top -d 1   # 动态查看进程 动态刷新时间1S

# q 退出
# P 按照CPU使⽤量排序
# M 按照内存使⽤量排序
# N 按照进程ID排序

[clh@localhost ~]$ top    #5行12列
top - 22:21:00 up 22:02,  3 users,  load average: 0.00, 0.01, 0.05
Tasks: 224 total,   1 running, 223 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  2.9 sy,  0.0 ni, 97.1 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0
KiB Mem :  2027856 total,    69492 free,  1032208 used,   926156 buff/cache
KiB Swap:  2097148 total,  2091764 free,     5384 used.   801452 avail Mem 

   PID USER    PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ 
   415  root      20    0       0          0      0 S   5.9  0.0   0:03.54 
 20160 clh       20    0  162100   2264   1528 R   5.9  0.1   0:00.04 
     1    root      20    0  193972   5844   3016 S   0.0  0.3   0:05.57 

#第一行-top
top - 22:21:00 up 22:02,  3 users,  load average: 0.00, 0.01, 0.05
22:21:00
- 当前系统时间
up 22:02 - 系统从开机-使⽤时间
3 users 表示当前登录到系统的⽤户的数量
load average: 0.00, 0.01, 0.05 : 负载平均值 - CPU在最后1分钟/5分钟/15分钟 平均利⽤率

#第二行  Tasks
Tasks: 224 total,   1 running, 223 sleeping,   0 stopped,   0 zombie
224 total:         系统当前总进程数量
1 running :         系统当前正在运行的进程数量
223 sleeping : 系统中睡眠状态的进程数量
0 stopped :      处于暂停状态下的进程数量
0 zombie :       僵⼫进程数量

#第三行- %Cpu(s):
%Cpu(s):  0.0 us,  2.9 sy,  0.0 ni, 97.1 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0
0.0 us: ⽤户态进程占⽤CPU百分⽐
2.9 sy :内核态进程占⽤CPU百分⽐
0.0 ni : 进程通过nice进⾏优先级修正的百分⽐
97.1 id:当前CPU空闲百分⽐
0.0 wa :等待进⾏I/O进程所占的百分⽐
0.0 hi : 硬件中断请求 百分⽐
0.0 si : 软件中断请求 百分⽐
0.0 st : hypervisor管理程序从虚拟机窃取时间 - 虚拟化

#第四行- KiB Mem:
KiB Mem :  2027856 total,    69492 free,  1032208 used,   926156 buff/cache
2027856 total
: 物理总内存数量 KB
69492 free : 闲置物理内存数量
1032208 used : 已经使⽤的内存数量
926156 buff/cache : 内存缓冲区大小(和硬盘数据交互缓存)
闲置物理内存数量 + 已经使用的内存数量 + 内存缓冲区大小 = 物理总内存数量

[clh@localhost ~]$ free     #查看系统相关的内存信息
              total        used        free      shared  buff/cache   available
Mem:        2027856     1032276       69392       23540      926188      801380
Swap:       2097148        5384     2091764
[clh@localhost ~]$ free -m  # 单位以M显示
              total        used        free      shared  buff/cache   available
Mem:           1980        1007          67          22         904         782
Swap:          2047           5        2042

#第五行- KiB Swap:
KiB Swap:  2097148 total,  2091764 free,     5384 used.   801452 avail Mem 
# Swap 内存交换分区 --- 位于硬盘上的⼀个分区
2097148 total : 总内存交换分区数量
2091764 free : 闲置未使⽤内存交换分区数量
5384 used : 使⽤的内存交换分区数量
801452 avail Mem - 启用新的应用程序估计可以使用的物理内存数量

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID     进程ID
USER 开启该进程的⽤户
PR      进程优先级
NI       NICE值
VIRT  虚拟内存的使用数量
RES   固定驻留物理内存量
SHR   共享存储使用量
%CPU 当前进程使用物理CPU百分比
%MEM 物理内存百分比
TIME+  使用CPU时间累积
COMMAND 产⽣该进程使用的命令

12.7 杀死进程-进程关闭  终止进程  kill  killall/pkill

# kill 命令


kill [-signal ID / NAME] 进程ID


[clh@localhost ~]$ kill 20982
[clh@localhost ~]$ cat /dev/zero

已终止

[clh@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

[root@centos7 ~]# kill -15 87191
[root@centos7 ~]# kill -term 87254

[clh@localhost ~]$ kill -kill 21529
[clh@localhost ~]$ cat /dev/zero
已杀死

15) SIGTERM -> 正常关闭掉进程
9) SIGKILL -> 强制关闭掉进程
1) SIGHUP -> 重启进程
18) SIGCONT     恢复信号
19) SIGSTOP     暂停信号


#进程不建议使用 kill 方式重启, 建议通过服务的方式重启

#通过进程名称方式killall

[root@centos7 tom]# killall firefox
[root@centos7 tom]# killall -I Firefox   # -I 忽略大小写

#通过进程名称方式pkill

[root@centos7 tom]# pkill firefox

# 踢掉用户
[root@centos7 tom]# pkill -t -9 pts/3

12.8 作业调度-前后台管理 fg bg nohup

# ctrl+z 把前台正在运行的任务 --- 暂停--调度到后台进行作业(job)

命令:
frontend-ground - fg
backend-ground - bg

[clh@localhost ~]$ firefox    #Firefox运行,占用命令行终端前端,此时按ctrl+z出现如下:
[1]+  已停止               firefox
[clh@localhost ~]$ jobs       #查看后台任务
[1]+  已停止               firefox
[clh@localhost ~]$ cat /dev/zero   
^Z                                             #ctrl+z
[2]+  已停止               cat /dev/zero  
[clh@localhost ~]$ cat /dev/zero >> /dev/null
^Z                                              #ctrl+z
[3]+  已停止               cat /dev/zero >> /dev/null
[clh@localhost ~]$ jobs       #查看后台作业进程
[1]   已停止               firefox
[2]-  已停止               cat /dev/zero
[3]+  已停止               cat /dev/zero >> /dev/null

[clh@localhost ~]$ fg %2    # 将cat /dev/zero切换到前台运行,% 表示后台作业号
cat /dev/zero                        #此时cat /dev/zero在前台运行,终端无法继续使用其他命令了
[clh@localhost ~]$ bg %3   # 将cat /dev/zero >> /dev/null处于后台运行
[3]+ cat /dev/zero >> /dev/null &     #进程在后台运行,&
[clh@localhost ~]$ jobs             
[1]+  已停止               firefox
[3]-  运行中               cat /dev/zero >> /dev/null &
[clh@localhost ~]$ fg %1      #将firefox调到前台运行
firefox
[clh@localhost ~]$ kill -19 %3    #将cat /dev/zero >> /dev/null 停止,原在后台运行
[3]+  已停止               cat /dev/zero >> /dev/null
[clh@localhost ~]$ kill -18 %3    #将cat /dev/zero >> /dev/null 恢复运行
[clh@localhost ~]$ kill -9 %3      #将cat /dev/zero >> /dev/null进程杀死
[3]+  已杀死               cat /dev/zero >> /dev/null

[clh@localhost ~]$ firefox &    #启动firefox 直接后台运行
[1] 30779
[clh@localhost ~]$ cat /dev/zero >> /dev/null &   #创建进程时,直接在后台运行
[2] 31107

[clh@localhost ~]$ nohup firefox &     #脱钩作业,此时关闭掉命令行终端Firefox仍能继续运行,因为原来的父进程是命令行终端,关掉命令行终端它的父进程会向上找到父进程的父进程。

12.9 守护进程 - deamon

#1.守护某个服务的进程 - 守护进程 (web服务 - httpd守护进程 (http deamon )/ sftp服务 --- vsftpd守护进程)
特点:
#2.运行在后台
#3.独立于终端 shell (pts/tty/:0) -> ? | 终端关闭-该进程仍可以运⾏
#4.周期性执⾏某种任务
#5.守护进程的⽗进程通常情况下PID=1进程 (systemd / init)
#6.守护进程通常以 xxxd结尾 (deamon), (pstree 可以看到运行了很多以d结尾的守护进程)
#7.守护进程的⽗进程即使被杀掉,该进程仍然可以继续运⾏,并且不会产⽣僵⼫进程。
#8.守护进程通常服务编写者在书写服务代码直接构建守护进程代码。 -> 此类服务在开启是会⾃动开启守护进程。

1.命令实现 (IP)
2.代码构建 (IE)

12.10 进程优先级-nice , renice

进程优先级数值越大 - 优先级越低
默认优先级PRI值-系统自动判断
可以通过nice , renice方式调整

#创建进程 - 调整进程优先级
#nohup nice -n 10 ./shi_keepalived &

#重新调整进程优先级 [root@centos7 ~]# renice -n -20 8689 8689 (process ID) old priority 18, new priority -20 普通⽤户 只可以将nice数值调⼤ , 1 到 19 root⽤户 可以调整数值 -20 到19

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值