Linux基础篇学习——进程管理(pstree,ps,pgrep,kill,killall,pkill,/proc,/sys)

概念

程序和进程

程序

指令+参数通过逻辑控制运行起来完成某项特定任务

进程

程序运行起来的结果
操作系统运行的基本单位
有生命周期(产生---->死亡)
进程有运行状态(running,sleeping,waiting,僵死)
并发性,交互性(管道)----共享内存,队列(kafka)
程序和进程不是一一对应的,相同的程序运行在不同的数据集上就是不同的进程

子进程和父进程

子进程会继承父进程的特性:安全性的身份认证;过去和当前的文件描述符,端口等资源特权;环境变量;程序代码。
父进程------>fork()------>子进程
子进程------>exec()------>运行程序
子进程------>exit()------>退出
在这里插入图片描述

进程和线程

对于linux而言,不严格区分,对于进程何处线程都将拥有独立的一套完整资源集(内存---->虚拟内存,CPU---->时间片)

Linux进程管理工具

pstree 查看进程树之间的关系

-p 同时列出每个进程的PID

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

ps 显示系统进程瞬间的运行动态

ps  aux

ps命令详情请点击查看

pgrep 获得正在被调度的进程的相关信息

1.pgrep通过匹配其程序名,找到匹配的进程
2.进程号越大,并不一定意味着进程的启动时间越晚

pgreep 查看进程号
pgrep -o 进程号最小(父进程)
pgrep -n 进程号最大(子进程)
pgrep -l 所有进程及名称

[root@zycentos7 ~]# pgrep sshd
6836
7120
7128
[root@zycentos7 ~]# pgrep -o sshd
6836
[root@zycentos7 ~]# pgrep -n sshd
7128
[root@zycentos7 ~]# pgrep -l sshd
6836 sshd
7120 sshd
7128 sshd

killall,kill,pkill

killall 杀死指定名字的进程

killall -i 交互模式
killall -l 列出所有的已知信号名称

编号 信号名
1) SIGHUP 重新加载配置
2) SIGINT 键盘中断Ctrl+c
3) SIGQUIT 键盘退出
9) SIGKILL 强制终止,可能会出问题
15) SIGTERM 终止(正常结束),缺省信号
18) SIGCONT 继续
19) SIGSTOP 停止
20)SIGTSTP 暂停^Z

示例1 SIGHUP信号发出之后,主进程的进程号不发生变化,子进程的进程号会发送变化

[root@zycentos7 ~]# ps -ef|grep nginx
root      31943      1  0 20:29 ?        00:00:00 nginx: master process nginx
nginx     31944  31943  0 20:29 ?        00:00:00 nginx: worker process
root      31948  28945  0 20:29 pts/2    00:00:00 grep --color=auto nginx
[root@zycentos7 ~]# kill -1 31943
[root@zycentos7 ~]# ps -ef|grep nginx
root      31943      1  0 20:29 ?        00:00:00 nginx: master process nginx
nginx     31982  31943  0 20:30 ?        00:00:00 nginx: worker process
root      31989  28945  0 20:30 pts/2    00:00:00 grep --color=auto nginx

示例2 键盘中断

[root@zycentos7 ~]# tty
/dev/pts/1
[root@zycentos7 ~]# ping 192.168.232.125
PING 192.168.232.125 (192.168.232.125) 56(84) bytes of data.
64 bytes from 192.168.232.125: icmp_seq=1 ttl=64 time=0.052 ms
……
64 bytes from 192.168.232.125: icmp_seq=29 ttl=64 time=0.079 ms
--- 192.168.232.125 ping statistics ---
29 packets transmitted, 29 received, 0% packet loss, time 28006ms
rtt min/avg/max/mdev = 0.052/0.168/2.452/0.432 ms

[root@zycentos7 ~]# tty
/dev/pts/2
[root@zycentos7 ~]# ps -ef|grep ping
root      29022  28172  0 19:33 pts/1    00:00:00 ping 192.168.232.125
root      29029  28945  0 19:33 pts/2    00:00:00 grep --color=auto ping
[root@zycentos7 ~]# kill -2 29022

示例3 kill -9和kill -15信号的区别

[root@zycentos7 ~]# tty
/dev/pts/0
[root@zycentos7 ~]# ps -ef|grep vim
root      31480  28172  0 20:20 pts/1    00:00:00 vim test01
root      31489  28945  0 20:20 pts/2    00:00:00 vim test02
root      31503  31413  0 20:20 pts/0    00:00:00 grep --color=auto vim
[root@zycentos7 ~]# kill -9 31480
[root@zycentos7 ~]# kill -15 31489
[root@zycentos7 ~]# ps -ef|grep vim
root      31537  31413  0 20:21 pts/0    00:00:00 grep --color=auto vim

[root@zycentos7 ~]# tty
/dev/pts/1
[root@zycentos7 ~]# vim test01
Killed
[root@zycentos7 ~]# vim test01
E325: ATTENTION
Found a swap file by the name ".test01.swp"
          owned by: root   dated: Sat Nov 16 20:20:05 2019
         file name: ~root/test01
          modified: no
         user name: root   host name: zycentos7
        process ID: 31480
While opening file "test01"
             dated: Sat Nov 16 19:42:46 2019
[root@zycentos7 ~]# ls -al .test01.swp	;删除该文件后可正常打开
-rw-r--r--. 1 root root 12288 Nov 16 20:20 .test01.swp

[root@zycentos7 ~]# tty
/dev/pts/2
[root@zycentos7 ~]# vim test02
Vim: Caught deadly signal TERM
Vim: Finished.
Terminated
[root@zycentos7 ~]# vim test02	;可正常打开

killall -q 不输出警告信息

[root@zycentos7 ~]# killall nginx
nginx: no process found
[root@zycentos7 ~]# killall -q  nginx
[root@zycentos7 ~]# echo $?
1

killall -s 发送指定的信号

killall -s HUP named
killall -HUP named

killall -v 报告信号是否成功发送
killall -9 named && killall named 杀死所有同名进程
如果需要杀死的进程需要查找,则需使用ps等命令再配合grep来查找进程在杀死,killall可以把这两个过程合二为一

kill 杀死指定PID的进程

1.通常,终止一个前台进程可以使用Ctrl+C键。
2.终止一个后台进程用kill命令:需要先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该进程。
3.kill命令是通过向进程发送指定的信号来结束相应进程的。在默认情况下,采用编号为15的TERM信号,TERM信号将终止所有不能捕获该信号的进程。对于那些可以捕获该信号的进程就要用编号为9的kill信号,强行“杀掉”该进程。

kill [选项] [进程id]

-l 信号 若果不加信号的编号参数,则使用-l参数会列出全部的信号名称
-a 当处理当前进程时,不限制命令名和进程号的对应关系
-p 指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s 指定发送信号
-u 指定用户
重点

  1. 普通用户只能使用不带signal参数的kill命令或最多使用 -9 信号。
  2. 当kill成功地发送了信号后,shell会在屏幕上显示出进程的终止信息。有时这个信息不会马上显示,只有当按下Enter键使shell的命令提示符再次出现时,才会显示出来。
  3. kill -9 信号使进程强行终止,常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。
  4. 要撤销所有的后台作业,可以输入killall 或者 kill 0 ,kill 0 可以用来检测进程是否存在。

实例1 列出所有信号名称

[root@zycentos7 ~]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 ……
63) SIGRTMAX-1  64) SIGRTMAX

实例2 得到指定信号的数值

[root@zycentos7 ~]# kill -l KILL
9

实例3 先用ps查找进程,然后用kill杀掉

[root@zycentos7 ~]# ps -ef|grep vim
root       7981   7964  0 09:27 pts/1    00:00:00 vim 1
root       7983   7740  0 09:28 pts/0    00:00:00 grep --color=auto vim
[root@zycentos7 ~]# kill 7981
[root@zycentos7 ~]# echo $?
0

实例4 彻底杀死进程

[root@zycentos7 ~]# ps -ef|grep vim
root       7987   7964  0 09:30 pts/1    00:00:00 vim 1
root       7989   7740  0 09:30 pts/0    00:00:00 grep --color=auto vim
[root@zycentos7 ~]# kill -9 7987

pkill

pkill是ps命令和kill命令的结合,按照进程名来杀死指定进程,可以发送信号
pkill -l pts/0 按终端杀死进程
pkill -9 -l pts/0 发送信号9,终端一并被杀死
pkill -u user 按用户杀死进程
pkill -19 -u user

htop 实时监测系统处理器状态

top命令详情请点击查看

[root@zycentos7 ~]# yum install htop -y

【监控软件top的增强版Htop,相比top其有着很多自身的优势】
1.两者相比起来,top比较繁琐
2.默认支持图形界面的鼠标操作
3.可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行
4.杀进程时不需要输入进程号等

在这里插入图片描述
上左区域 显示了CPU、物理内存和交换分区的信息
上右区域 显示了任务数量、平均负载和连接运行时间等信息
进程区域 显示出当前系统中的所有进程 与top显示一致

PID:进行的标识号
USER:运行此进程的用户
PRI:进程的优先级
NI:进程的优先级别值,默认的为0,可以进行调整
VIRT:进程占用的虚拟内存值
RES:进程占用的物理内存值
SHR:进程占用的共享内存值
S:进程的运行状况,R表示正在运行、S表示休眠,等待唤醒、Z表示僵死状态
%CPU:该进程占用的CPU使用率
%MEM:该进程占用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间
COMMAND:进程启动的启动命令名称

进程前后台

前台一次只能运行一个进程,后台一次可以运行多个进程
把一个前台程序放到后台执行 &

[root@zycentos7 ~]# ping www.baidu.com >/dev/null 2>&1 &
[1] 32627
[root@zycentos7 ~]# ps -ef|grep ping
root      32627  28945  0 20:42 pts/2    00:00:00 ping www.baidu.com
root      32636  28945  0 20:42 pts/2    00:00:00 grep --color=auto ping
[root@zycentos7 ~]# ping www.baidu.com >/dev/null 2>&1 &
[2] 32652
[root@zycentos7 ~]# ps -ef|grep ping
root      32627  28945  0 20:42 pts/2    00:00:00 ping www.baidu.com
root      32652  28945  0 20:43 pts/2    00:00:00 ping www.baidu.com
root      32656  28945  0 20:43 pts/2    00:00:00 grep --color=auto ping

进程状态

sleep

  • (S)可中断睡眠
  • (D)不可中断睡眠

running

  • (ready)
  • (内核)
  • (用户)

stop
zombie

  • (Z)资源已清理
  • (X)资源未清理

进程状态间的切换

运行 就绪 等待
在CPU上运算 资源已分配,等待CPU空闲 事件未触发

运行----时间片耗尽---->就绪
等待----事件触发---->就绪
就绪----进程调用或者系统调用---->运行
运行----等待事件发生---->等待

进程优先级

nice值(NI) 相对优先级(优先级度量)-20~+19,nice值越低优先级越高【在原来使用O1调度的Linux上把nice叫态优先级】
priorty值(PR) 将nice值级别显示为映射到更大优先级队列,-20映射到100,+19映射到139【在原来使用O1调度的Linux上把priorty叫态优先级】
0-99 (100)系统进程优先级(这个范围值的进程是实时进程,隐含了一个信息:当前Linux系统是一个已经支持实时进程的操作系统)
100-139 (40)用户进程优先级(非实时进程)

使用ps查看nice级别,使用top查看PR级别

[root@zycentos7 ~]# ps axo pid,command,nice --sort=-nice
PID COMMAND                      NI
    32 [khugepaged]                 19
    31 [ksmd]                        5

NI - 常驻进程,无优先级
指定nice值

[root@zycentos7 ~]# nice -n -5 sleep 600 &
[4] 36673
[root@zycentos7 ~]# ps axo command,pid,nice|grep sleep
sleep 600                    36673  -5
grep --color=auto sleep      36706   0

用renice改变nice值

[root@zycentos7 ~]# renice -20 PID

作业控制

作业

  1. 在终端上执行一条语句,就是一个作业;多个进程完成一项任务,就是一个作业
  2. 对于shell不会对进程做控制,对进程做控制需要kill,killall,pkill,top发送信号,shell是对作业控制

进程和作业的区别

  1. 区别:进程是一个程序在一个数据集上的一次执行,而作业是用户提交给系统的一个任务。
  2. 关系:一个作业通常包括几个进程,几个进程共同完成一个任务,即作业。
  3. 用户提交作业以后,当作业被调度,系统会为作业创建进程,一个进程无法完成时,系统会为这个进程创建子进程。

作业控制

shell可以同时运行一个前台作业和任意多个后台作业,称为作业控制

操作 含义
jobs 查看作业
Ctrl+z 将前台的程序挂起(暂停)到后台
fg %# 恢复到前台继续运行
bg %# 恢复到后台继续运行
kill -9 %# 默认发送15信号
[root@zycentos7 ~]# sleep 600 &
[1] 7838
[root@zycentos7 ~]# sleep 600
^Z
[2]+  Stopped                 sleep 600
[root@zycentos7 ~]# jobs
[1]-  Running                 sleep 600 &
[2]+  Stopped                 sleep 600
[root@zycentos7 ~]# ps aux|grep sleep
root       7838  0.0  0.0 107956   356 pts/0    S    10:08   0:00 sleep 600
root       7841  0.0  0.0 107956   356 pts/0    T    10:09   0:00 sleep 600
root       7844  0.0  0.0 112712   964 pts/0    R+   10:10   0:00 grep --color=auto slee
[root@zycentos7 ~]# fg 2
sleep 600
^Z
[2]+  Stopped                 sleep 600
[root@zycentos7 ~]# jobs
[1]-  Running                 sleep 600 &
[2]+  Stopped                 sleep 600
[root@zycentos7 ~]# bg 2
[2]+ sleep 600 &
[root@zycentos7 ~]# jobs
[1]-  Running                 sleep 600 &
[2]+  Running                 sleep 600 &
[root@zycentos7 ~]# kill %1
[root@zycentos7 ~]# jobs
[1]-  Terminated              sleep 600
[2]+  Running                 sleep 600 &
[root@zycentos7 ~]# jobs
[2]+  Running                 sleep 600 &
[root@zycentos7 ~]# kill -9 %2
[root@zycentos7 ~]#
[2]+  Killed                  sleep 600

/proc与/sys介绍

概括

/proc 正在运行的内核信息映射

  1. 进程信息
  2. 内存资源信息
  3. 磁盘分区信息

/sys 硬件设备的驱动程序信息

/proc 文件系统

Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。

  1. /proc下文件基本都是只读的,除了/proc/sys目录,它是可写的(查看和修改内核的运行参数)
  2. /proc下数字命令的目录就是对于PID的进程目录
文件 含义
/proc/cpuinfo cpu信息(lscpu)
/proc/meminfo 内存使用信息(free -m)
/proc/uptime cpu负载(uptime)
/proc/cmdline 内核启动参数信息
/proc/devices 已经加载的设备并分类
/proc/filesystems 内核当前支持的文件系统类型
/proc/loadavg 负载状态,与uptime命令有关
/proc/modules 所有加载到内核的模块列表
/proc/mounts 系统中使用的所有挂载
/proc/stat 所有的CPU活动信息

/sys 文件系统

Sysfs是一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息。即在用户态可以通过对sys文件系统的访问,来看内核态的一些驱动或者设备等。

文件或目录 含义
/sys/fs 描述系统中所有的文件系统,包括文件系统本身和按照文件系统分类存放的已挂载点
/sys/kernel 内核中所有可调整的参数
发布了43 篇原创文章 · 获赞 30 · 访问量 5933

猜你喜欢

转载自blog.csdn.net/qq_42049496/article/details/103160226