跟着大佬学习云计算第十四天,带你详细讲解进程管理的学习

Linux进程管理

目录

Linux进程管理

一、进程查看命令

1、pstree

2、ps

3、pgrep

4、top、htop

二、进程管理命令

1、kill

2、pkill与killall

三、进程类型

1、前台进程

2、后台进程


一、进程查看命令

1、pstree

用于查看进程树之间的关系,谁是父进程,谁是子进程,可以清楚的看出来是谁创建了谁

用法:

 pstree [选项]  

选项:

-A各进程树之间的连接以ASCII码字符来连接
-U:各进程树之间的连接以utf8字符来连接,某些终端可能会有错误
-p同时列出每个进程的PID
-u同时列出每个进程的所属账号名称

2、ps

显示系统当前进程瞬间运行状态

用法:

ps [选项]  

选项:

-A所有的进程均显示出来,与 -e 具有同样的效用
-a显示现行终端机下的所有进程,包括其他用户的进程
-u以用户为主的进程状态
-x通常与 a 这个参数一起使用,可列出较完整信息
-l较长、较详细的将该PID 的的信息列出
 [root@localhost ~]# ps aux
 USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
 root          1  0.0  0.3 128384  6376 ?        Ss   5月13   0:07 /usr/lib/systemd/systemd --sw
 root          2  0.0  0.0      0     0 ?        S    5月13   0:00 [kthreadd]
 
#显示表头
 [root@localhost ~]# ps aux | less
 USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
 root           1  0.0  0.9 174628 17380 ?        Ss   03:03   0:24 /usr/lib/systemd/systemd rhgb --switched-root --system --deserialize 31
 root           2  0.0  0.0      0     0 ?        S    03:03   0:00 [kthreadd]
 root           3  0.0  0.0      0     0 ?        I<   03:03   0:00 [rcu_gp]
 root           4  0.0  0.0      0     0 ?        I<   03:03   0:00 [rcu_par_gp]
 ​
 ?表示:没有在任何终端运行,在后台

输出解析:

字段含义
USER进程所属用户
PID进程 ID
%CPUCPU 使用率(百分比)
%MEM物理内存使用率(百分比)
VSZ进程使用的虚拟内存大小
RSS进程使用的物理内存大小(真实占有)
TTY关联的终端
STAT进程状态(如 S=睡眠,R=运行,Z=僵尸进程)
START进程启动时间
TIME累计使用的 CPU 时间,进程运行的时间
COMMAND启动进程的命令行

进程状态:

STAT 字段由 单个或多个字符 组成,常见符号及含义如下:

符号全称含义
RRunning正在运行(在 CPU 上执行)或可运行(在就绪队列等待 CPU)
SSleeping可中断睡眠(等待事件,如 I/O 完成,可被信号唤醒)
DDisk sleep不可中断睡眠(通常在等待磁盘 I/O,不能被信号中断,需等待操作完成)
ZZombie僵尸进程(进程已终止,但父进程未回收其资源)(前台程序已死,但后台驻留进程没有正常退出;后果就是占用资源不干活)
TStopped (by signal)停止(进程被信号暂停,如 SIGSTOP)
tTracing stop跟踪停止(被调试器暂停,如 ptrace
XDead死亡(进程已终止,但尚未被回收,极少见)
KWakekill可唤醒的休眠(等待事件,但可被信号唤醒,如 SIGKILL)
WPaging缺页(进程因缺页被挂起,需从磁盘加载内存页)
IIdle空闲(内核线程或无活动的进程,如 kworker)

TAT 可能包含多个符号,例如 Ss、D+ 等:

  • Ss:主进程处于可中断睡眠(S),且是会话领导者(s)

  • D+:不可中断睡眠(D),且进程组有子进程(+)

  • Z+:僵尸进程(Z),且有子进程(+)

  • Ss+:可中断睡眠(S),会话领导者(s),且有子进程(+)

查看特定状态的进程

 # 查看所有僵尸进程(STAT=Z)
 ps aux | grep ' Z '
 ​
 # 查看所有不可中断睡眠的进程(STAT=D)
 ps aux | grep ' D '
 ​
 # 查看所有运行中的进程(STAT=R)
 ps aux | grep ' R '
 

用elf查看

 [root@localhost ~]# ps elf | less
 ​
 F   UID     PID    PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
 4     0    2741    2740  20   0 225076  6656 do_wai Ss   pts/0      0:04 -bash USER=root LOGNAME=root HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin SHELL=/bin/bash TERM=xterm-256color SELINUX_ROLE_REQUESTED= SELINUX_LEVEL_REQUESTED= SELINUX_USE_CURRENT_RANGE= MOTD_SHOWN=pam XDG_SESSION_ID=4 XDG_RUNTIME_DIR=/run/user/0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus XDG_SESSION_TYPE=tty XDG_SESSION_CLASS=user SSH_CLIENT=192.168.162.1 61792 22 SSH_CONNECTION=192.168.162.1 6
 ​
 root@localhost ~]# ps -elf | less
 ​
 F S UID          PID    PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
 4 S root           1       0  0  80   0 - 43657 ep_pol 03:03 ?        00:00:24 /usr/lib/systemd/systemd rhgb --switched-root --system --dese
 rialize 31
 1 S root           2       0  0  80   0 -     0 kthrea 03:03 ?        00:00:00 [kthreadd]
 1 I root           3       2  0  60 -20 -     0 rescue 03:03 ?        00:00:00 [rcu_gp]
 1 I root           4       2  0  60 -20 -     0 rescue 03:03 ?        00:00:00 [rcu_par_gp]
 1 I root           5       2  0  60 -20 -     0 rescue 03:03 ?        00:00:00 [slub_flushwq]
 1 I root           6       2  0  60 -20 -     0 rescue 03:03 ?        00:00:00 [netns]
 1 I root          10       2  0  60 -20 -     0 rescue 03:03 ?        00:00:00 [mm_percpu_wq]
 1 I root          12       2  0  80   0 -     0 rcu_ta 03:03 ?        00:00:00 [rcu_tasks_kthre]
字段含义
F标志(Flags):进程状态标志(如 4 表示 SIGNAL权限,1表示 R运行中)
S状态(State):进程状态(S=睡眠,R=运行,Z=僵尸进程等)
UID用户 ID:进程所属用户的 ID(非用户名)
PID进程 ID:唯一标识进程的数字
PPID父进程 ID:创建该进程的父进程的 PID
CCPU 使用率:进程的 CPU 占用百分比(瞬时值)
PRI优先级(Priority):内核调度优先级(数值越小,优先级越高)
NINice 值:用户空间调整的优先级(范围 -20 到 19,数值越小优先级越高)
ADDR内存地址:进程代码或数据段的虚拟内存地址(通常为 -或十六进制值)
SZ虚拟内存大小:进程占用的虚拟内存总量(单位 KB)
WCHAN等待通道:进程当前在内核中等待的事件(如 0表示运行中,do_syscall表示系统调用)
STIME启动时间:进程的启动时间(日期或小时)
TTY关联终端:进程关联的终端(? 表示无终端,如守护进程)
TIME累计 CPU 时间:进程自启动以来消耗的总 CPU 时间
CMD命令行:启动进程的完整命令

查看所有进程的详细信息

  • 适用场景:系统监控、性能分析、排查僵尸进程或异常进程

 ps -elf | grep -E 'Z|D'  # 查找僵尸进程(Z)或不可中断睡眠进程(D)

3、pgrep

查看进程的信息,包括进程是否已经消亡,通过pgrep来获得正在被调度的进程的相关信息。 pgrep通过匹配其程序名,找到匹配的进程

用法:

 pgrep [选项] pidname 

选项:

-l同时显示进程名和PID
-o当匹配多个同一命令启动的进程时,显示进程号最小的那个
-n当匹配多个同一命令启动的进程时,显示进程号最大的那个

注意:#pgrep命令用来查找进程的信息,通常会和kill命令来连用,在指定条件下kill问题进程

pgrep [选项] pidname #先查找进程号
 ​
 kill [选项] pid #用kill 结束进程
 [root@localhost ~]# pgrep -l nginx
 148704 nginx
 148705 nginx
 ​
 [root@localhost ~]# pgrep nginx
 148704
 148705
 ​
 root@localhost ~]# kill -9 `pgrep httpd`
 [root@localhost ~]# ps aux | grep httpd
 root      286737  0.0  0.1 221680  2304 pts/0    S+   18:37   0:00 grep --color=auto httpd

4、top、htop

top:动态监控系统处理器状态,htop姑且称之为top的增强版

yum install epel-release -y    #安装epel源     
 yum install htop -y     #安装htop
 [root@localhost ~]# htop
 ​
     0[||               6.8%] Tasks: 86, 137 thr, 199 kth
     1[|                1.2%] Load average: 0.34 0.22 0.0
   Mem[|||||||||||648M/1.70G] Uptime: 18:53:57
   Swp[||        67.7M/2.02G]
 ​
   [Main] [I/O]
     PID USER       PRI  NI  VIRT   RES   SHR S  CPU%▽MEM% 
  163293 root        20   0  513M 11388  6460 S   0.0  0.6
  163294 root        20   0  513M 11388  6460 S   0.0  0.6
  163295 root        20   0  438M  8236  5376 S   0.0  0.5
  163297 root        20   0  227M 10112  8576 S   0.0  0.6
  163299 root        20   0  385M 12892 10716 S   0.0  0.7
  163301 root        20   0  385M 12892 10716 S   0.0  0.7 
  163302 root        20   0  441M  9212  6400 S   0.0  0.5
  163304 root        20   0  513M 11388  6460 S   0.0  0.6
  163305 root        20   0  441M  9212  6400 S   0.0  0.5
  163307 root        20   0  437M  8232  5632 S   0.0  0.5
 F1Help  F2Setup F3SearchF4FilterF5Tree  F6SortByF7Nice -F8

常用选项

  • -d:指定更新的间隔时间,以秒为单位。

  • -:指定更新的次数。

  • -p:监控指定进程的 ID。

  • -u:监控指定用户的进程。

常用按键

  • 空格键:立即刷新显示。

  • M:按照内存使用百分比对进程进行排序。

  • P:按照 CPU 使用百分比对进程进行排序。

  • T:按照进程运行时间对进程进行排序。

  • q:退出 top 命令。

  • h:显示帮助信息。

案例

`top -d 5`:每隔 5 秒更新一次进程信息。
 ​
 `top -n 2`:更新两次进程信息后退出。
 ​
 `top -p 1234`:监控进程 ID 为 1234 的进程。
 ​
 `top -u root`:监控 root 用户的进程。

 top - 22:02:02 up 18:58,  3 users,  
 load average: 0.00, 0.
 Tasks: 283 total,   1 running, 282 sleeping,   0 stopped, 
 %Cpu(s):  0.2 us,  0.3 sy,  0.0 ni, 99.2 id,  0.0 wa,  0.2
 MiB Mem :   1743.4 total,    646.9 free,    808.0 used,   
 MiB Swap:   2064.0 total,   1991.8 free,     72.2 used.  

关键指标解读

指标数值分析
load average系统负载 (Load Average)0.00, 0.00, 0.001/5/15 分钟平均负载均为 0,表明系统当前无任务等待 CPU 或 I/O,处于空闲状态。
Tasks任务统计 (Tasks)283 total总进程数为 283,其中 1 个运行中,282 个睡眠,无僵尸进程,系统负载极低。
%Cpu(s)CPU 使用率0.2% us用户态进程占用 0.2% CPU,系统态 (sy) 占用 0.3%,空闲 (id) 占 99.2%。
MiB Mem内存使用808.0 MiB used已用内存 808 MiB,剩余 646.9 MiB,缓存/缓冲区占 288.5 MiB,内存充足。
MiB SwapSwap 使用72.2 MiB usedSwap 仅使用 72.2 MiB,物理内存未达到压力阈值。

二、进程管理命令

1、kill

语法:

 kill [选项] pid 

选项:

-l列出所有信号参数
-a当处理当前进程时,不限制命令名和进程号的对应关系
-u指定用户
-p指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s发送指定的信号
-9强制杀死
-0(数字零)用来检测一个进程是否存在。

父进程在的话杀不死子进程;强制杀死-9,会生成一个新的子进程

 [root@localhost ~]# ps aux | grep httpd
 root      261039  1.0  0.6  20100 11344 ?        Ss   15:14   0:00 /usr/sbin/httpd -DFOREGROUND
 apache    261040  0.0  0.3  21976  7104 ?        S    15:14   0:00 /usr/sbin/httpd -DFOREGROUND
 apache    261041  0.0  1.0 1440152 19364 ?       Sl   15:14   0:00 /usr/sbin/httpd -DFOREGROUND
 apache    261042  0.1  0.9 1440152 17060 ?       Sl   15:14   0:00 /usr/sbin/httpd -DFOREGROUND
 apache    261043  0.1  1.1 1571288 21412 ?       Sl   15:14   0:00 /usr/sbin/httpd -DFOREGROUND
 root      261280  0.0  0.1 221680  2304 pts/0    S+   15:15   0:00 grep --color=auto httpd
 [root@localhost ~]# kill 261043
 [root@localhost ~]# ps aux | grep httpd
 root      261039  0.4  0.6  20100 11344 ?        Ss   15:14   0:00 /usr/sbin/httpd -DFOREGROUND
 apache    261040  0.0  0.3  21976  7104 ?        S    15:14   0:00 /usr/sbin/httpd -DFOREGROUND
 apache    261041  0.0  1.0 1440152 19364 ?       Sl   15:14   0:00 /usr/sbin/httpd -DFOREGROUND
 apache    261042  0.0  0.9 1440152 17060 ?       Sl   15:14   0:00 /usr/sbin/httpd -DFOREGROUND
 apache    261043  0.0  1.1 1571288 21412 ?       Sl   15:14   0:00 /usr/sbin/httpd -DFOREGROUND
 root      261362  0.0  0.1 221680  2304 pts/0    S+   15:16   0:00 grep --color=auto httpd
 [root@localhost ~]# kill -9 261043
 [root@localhost ~]# ps aux | grep httpd
 root      261039  0.2  0.6  20100 11344 ?        Ss   15:14   0:00 /usr/sbin/httpd -DFOREGROUND
 apache    261040  0.0  0.3  21976  7104 ?        S    15:14   0:00 /usr/sbin/httpd -DFOREGROUND
 apache    261041  0.0  1.0 1440152 19364 ?       Sl   15:14   0:00 /usr/sbin/httpd -DFOREGROUND
 apache    261042  0.0  0.9 1440152 17060 ?       Sl   15:14   0:00 /usr/sbin/httpd -DFOREGROUND
 apache    261443  0.0  0.8 1440152 15128 ?       Sl   15:16   0:00 /usr/sbin/httpd -DFOREGROUND
 root      261518  0.0  0.1 221680  2304 pts/0    S+   15:16   0:00 grep --color=auto httpd

信号列表:

 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

信号含义解析:

信号名称作用
SIGHUP终端挂起或者控制进程结束时发出的信号,通常用于通知守护进程重新读取配置文件等。
SIGINT键盘中断信号,通常由用户按下 Ctrl+C 产生,用于终止正在运行的程序。
SIGQUIT键盘退出信号,通常由用户按下 Ctrl+\ 产生,用于使程序异常退出并产生核心转储文件(如果可能)。
SIGILL非法指令信号,表示程序执行了一条非法的机器指令。
SIGTRAP跟踪陷阱信号,用于调试程序,通常由断点触发。
SIGABRT异常终止信号,通常由程序内部的 abort 函数调用产生。
SIGBUS总线错误信号,通常表示访问内存时出现了总线错误。
SIGFPE浮点运算异常信号,例如除以零等浮点运算错误。
SIGKILL强制终止信号,无法被捕获或忽略,用于立即终止进程。
SIGUSR1用户自定义信号 1,留给用户程序自定义用途。
SIGSEGV内存访问越界信号,通常表示程序尝试访问非法的内存地址。
SIGUSR2用户自定义信号 2,留给用户程序自定义用途。
SIGPIPE管道破裂信号,当进程向一个没有读端的管道写入数据时产生。
SIGALRM闹钟信号,通常由 alarm 函数设置的定时器超时产生。
SIGTERM终止信号,是 kill 命令默认发送的信号,用于请求程序正常终止。
SIGSTKFLT协处理器栈错误信号,在某些特定架构的系统上使用。
SIGCHLD子进程状态改变信号,当子进程终止、暂停或继续运行时,父进程会收到此信号。
SIGCONT继续执行信号,用于使暂停的进程继续运行。
SIGSTOP暂停进程信号,无法被捕获或忽略,用于暂停进程的执行。
SIGTSTP终端停止信号,通常由用户按下 Ctrl+Z 产生,用于暂停前台进程的运行。
SIGTTIN后台进程从控制终端读取数据时收到的信号。
SIGTTOU后台进程向控制终端写入数据时收到的信号。
SIGURG紧急数据到达信号,通常用于网络编程中表示有紧急数据需要处理。
SIGXCPU超过 CPU 时间限制信号,表示进程超过了设定的 CPU 使用时间限制。
SIGXFSZ超过文件大小限制信号,表示进程试图扩大文件超过了系统限制。
SIGVTALRM虚拟定时器信号,用于在虚拟时间内设置定时器超时。
SIGPROF性能分析定时器信号,用于性能分析工具。
SIGWINCH窗口大小改变信号,当终端窗口大小发生改变时产生。
SIGIO异步 I/O 信号,表示异步 I/O 事件发生。
SIGPWR电源故障信号,在某些系统上表示电源状态发生变化。
SIGSYS系统调用错误信号,表示进程执行了一个无效的系统调用。
SIGRTMIN实时信号的最小值。
35 - 64SIGRTMIN+1 至 SIGRTMAX 是一系列的实时信号,用于实时应用程序中的优先级信号传递等

2、pkill与killall

pkill是ps命令和kill命令的结合,按照进程名来杀死指定进程,pkill和killall应用方法差不多,也是直接杀死运行中的程序,如果想杀掉单个进程,请用kill来杀掉。

用法

pkill/killall [选项] 进程名
[root@localhost ~]# pkill httpd

三、进程类型

1、前台进程

在终端界面运行的进程,运行前台进程后,终端无法操作

#将前台进程放到后台运行
firefox & 
#注意:该运行前台进程的方式,当终端关闭时,进程也会随着关闭
nohup firefox & #关闭终端,进程不掉
#查看
jobs
#将进程调到前台运行
fg 1
#将正在运行的前台进程放到后台运行
ctrl + z
bg 1
[root@localhost nginx]# pgrep nginx
266713
266714
266715
[root@localhost nginx]# kill -9 `pgrep nginx`
[root@localhost nginx]# ps aux | grep nginx
root      272194  0.0  0.1 221680  2304 pts/0    S+   16:36   0:00 grep --color=auto nginx

2、后台进程

驻留在后端运行的进程

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值