Linux进程管理

进程基本概述

1进程的组成部分 2进程的环境 3进程的产生 4进程的分类

Linux进程调度与多任务

进程优先级

  • 进程优先级范围:0-139,数字越小优先级越高
    - 0-99:实时优先级,由内核调整
    - 100-139:静态优先级,用户可控制
  • 进程优先级高的特点:
    - 获得更多的CPU运行时间
    - 更优先获得CPU运行机会
    要修改进程的优先级可以通过调整进程的nice值来实现,nice值越小,优先级越高:
    nice值的范围是(-20到19),-20对应100,19对应139

相对优先级描述

nice级别与权限

普通用户只能通过nice命令降低自己进程的优先级;只有Root用户才能通过nice命令提高自己进程的优先级

进程优先级调整

renice NI PID #调整已经启动的进程nice值
例:renice 3 3704
nice -n NI Command

进程管理命令

ps命令用于列出当前所有进程,可以查看进程的详细信息

包括:

  • 用户识别符(UID),它确定进程的特权
  • 唯一进程识别符(PID)
  • CPU和已经划分的实时时间
  • 进程在各个位置上分配的内存数量
  • 进程的位置STDOUT,称为控制终端
  • 当前的进程状态
    ps支持三种选项格式:
    - UNIX(POSIX)选项,可以分组但必须以连字符开头
    - BSD选项,可以分组但不可以与连字符同用
    - GNU长选项,以双联字符开头

ps(process state),显示进程信息:

 - 加了[ ]中括号的,表示内核线程,通常位于顶部- exiting或defunct表示僵尸进程

常用参数:
a //显示所有与终端有关的进程
u //显示进程是由哪个用户启动的
x //显示所有与终端无关的进程

-e //显示所有进程,与-A效果相同
-l //以长格式显示
-F //显示更详细的完整格式的进程信息
-f //显示更详细的完整格式的进程信息
-H //以进程层级格式显示进程相关信息
-o //根据自己的需要选择要显示的字段

显示所有终端进程
显示启动用户
显示与所有终端无关的进程

[root@wcluser ~]# ps aux | grep smb
root       1520  0.0  1.1 189724 21932 ?        Ss   8月06   0:00 /usr/sbin/smbd --foreground --no-process-group
root       1683  0.0  0.2 162924  5488 ?        S    8月06   0:00 /usr/sbin/smbd --foreground --no-process-group
root       1684  0.0  0.2 162916  4380 ?        S    8月06   0:00 /usr/sbin/smbd --foreground --no-process-group
root       1686  0.0  0.3 189724  5896 ?        S    8月06   0:00 /usr/sbin/smbd --foreground --no-process-group

显示所有进程
以长格式显示进程
更详细显示进程相关信息

[root@wcluser ~]# ps -elf | grep smb
4 S root       1520      1  0  80   0 - 47431 do_epo 8月06 ?       00:00:00 /usr/sbin/smbd --foreground --no-process-group
1 S root       1683   1520  0  80   0 - 40731 do_epo 8月06 ?       00:00:00 /usr/sbin/smbd --foreground --no-process-group
1 S root       1684   1520  0  80   0 - 40729 do_epo 8月06 ?       00:00:00 /usr/sbin/smbd --foreground --no-process-group
1 S root       1686   1520  0  80   0 - 47431 do_epo 8月06 ?       00:00:00 /usr/sbin/smbd --foreground --no-process-group

显示所有进程
以长格式显示进程
层级格式显示进程相关信息

[root@wcluser ~]# ps -elH | grep smb
4 S     0   1520      1  0  80   0 - 47431 do_epo ?        00:00:00   smbd
1 S     0   1683   1520  0  80   0 - 40731 do_epo ?        00:00:00     smbd-notifyd

显示所有进程
以长格式显示进程
显示更详细的完整格式的进程信息

[root@wcluser ~]# ps -elF | grep smb
4 S root       1520      1  0  80   0 - 47431 do_epo 21932   0 8月06 ?       00:00:00 /usr/sbin/smbd --foreground --no-process-group
1 S root       1683   1520  0  80   0 - 40731 do_epo  5488   0 8月06 ?       00:00:00 /usr/sbin/smbd --foreground --no-process-group
1 S root       1684   1520  0  80   0 - 40729 do_epo  4380   0 8月06 ?       00:00:00 /usr/sbin/smbd --foreground --no-process-group
1 S root       1686   1520  0  80   0 - 47431 do_epo  5896   0 8月06 ?       00:00:00 /usr/sbin/smbd --foreground --no-process-group

只显示进程号、命令、nice优先级

[root@wcluser ~]# ps -o pid,comm,niPID COMMAND          NI2105 bash              02300 ps                0
aux结果 解析
VSZ Virtual memory SiZe,虚拟内存集
RSS ReSident Size,常驻内存集
STAT 进程状态
TIME 运行时的累积时长
ps命令结果 解析
NI nice值
PRI 优先级
PSR 进程运行在哪个CPU核心上
RTPTRIO 实时优先级
C 运行的CPU编号
STIME 进程的启动时

pstree

进程生成树

[root@wcluser ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]├─VGAuthService├─agetty├─atd├─auditd─┬─sedispatch│        └─2*[{auditd}]├─chronyd├─crond├─dbus-daemon───{dbus-daemon}├─firewalld───{firewalld}├─gssproxy───5*[{gssproxy}]├─lsmd├─mcelog├─polkitd───5*[{polkitd}]├─rhsmcertd├─rngd───{rngd}├─rpc.idmapd├─rpc.mountd├─rpc.statd├─rpcbind├─rsyslogd───2*[{rsyslogd}]├─smartd├─smbd─┬─cleanupd│      ├─lpqd│      └─smbd-notifyd├─sshd─┬─sshd───sshd───bash│      └─sshd───sshd─┬─bash───pstree│                    └─bash├─sssd─┬─sssd_be│      └─sssd_nss├─systemd───(sd-pam)├─systemd-journal├─systemd-logind├─systemd-udevd├─tuned───3*[{tuned}]└─vmtoolsd───{vmtoolsd}

pgrep

用于查看进程号(PID)

[root@wcluser ~]# pgrep smb
1520
1683
[root@wcluser ~]# pgrep sshd
1111
1894
1910
2100
2104

pidof (pgrep类似主要用pidof)

根据进程名称查询其PID号

[root@wcluser ~]# pidof smbd
1686 1684 1683 1520
[root@wcluser ~]# pidof sshd
2104 2100 1910 1894 1111

vmstat

语法:
vmstat [number] [number] #vmstat+间隔显示的时间(默认单位秒)+显示的次数

[root@wcluser ~]# vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st2  0      0 1224760   3196 330888    0    0    15     3   57  115  0  0 100  0  00  0      0 1224668   3196 330888    0    0     0    14   75  145  0  0 100  0  00  0      0 1224668   3196 330888    0    0     0     0   51   99  0  0 100  0  00  0      0 1224700   3196 330888    0    0     0     0   54  104  0  0 100  0  00  0      0 1224700   3196 330888    0    0     0     0   50   96  0  0 100  0  0
procs:r(running)  //表示等待运行的队列长度,也即等待运行的进程的个数b(block)    //表示阻塞队列长度,也即处于不可中断睡眠态的进程个数
memory:swpd        //交换内存的使用总量free        //空闲物理内存总量buffer      //用于buffer的内存总量cache       //用于cache的内存总量
swap:si(swap in)     //表示从物理内存有多少页面换进swap,也即数据进入swap的数据速率(kb/s)so(swap out)    //表示从swap有多少页面换进物理内存,也即数据离开swap的数据速率(kb/s)
io:bi(block in)    //表示磁盘块有多少个被调入内存中,也即从块设备读入数据到系统的速率(kb/s)bo(block out)   //表示有多少个磁盘块从内存中被同步到硬盘上去了,也即保存数据至块设备的速率(kb/s)
system:in( interrupts)     //表示中断的个数,也即中断速率(kb/s)cs(context switch)  //表示上下文切换的次数,也即进程切换速率(kb/s)
CPU:us      //表示用户空间sy      //表示内核空间id      //表示空闲百分比wa      //表示等待IO完成所占据的时间百分比st      //表示steal,被虚拟化技术偷走的时间(比如运行虚拟机)

控制作业

1. 作业与会话

2. 作业分类

  1. 在后台运行作业

sleep

休眠命令

语法:
sleep 休眠时间 & #’&'将休眠操作转入后台

[root@wcluser ~]# sleep 50 &
[1] 2387

jobs

查看后台进程命令

[root@wcluser ~]# jobs
[2]+  已停止               vim /root/passwd

fg

启动后台进程命令
fg %number
#通过jobs命令查看进程的顺序号在%后接上进程顺序号可指定对应进程开启

[root@wcluser ~]# jobs
[3]+  已停止               sleep 1000
[4]-  运行中               sleep 500 &
[root@wcluser ~]# fg %3
sleep 1000

Ctrl+z

将进程转入后台的同时,暂时停止进程

sleep 1000
^Z
[3]+  已停止               sleep 1000
[root@wcluser ~]# jobs
[3]+  已停止               sleep 1000

kill

用于结束进程
kill %number
kill PID

[root@wcluser ~]# jobs
[3]+  已停止               sleep 1000
[4]-  运行中               sleep 500 &
[root@wcluser ~]# kill %3[3]+  已停止               sleep 1000
[root@wcluser ~]# jobs
[3]+  已终止               sleep 1000
[4]-  运行中               sleep 500 &
[root@wcluser ~]# ps -ef | grep vim
root       2466   2130  0 04:33 pts/2    00:00:00 vim /root/passwd
root       2468   2105  0 04:33 pts/1    00:00:00 grep --color=auto vim
[root@wcluser ~]# kill 2466
Vim: Finished.
已终止
[root@wcluser ~]#

进程之间沟通

套接字 (socket)
IP地址+端口号
进程之间通信方式:

  • 同一主机
    - 共享内存
    - 信号:Signal(占大多数)
  • 不同主机
    - rpc: remote procecure call
    - 基于socket实现进程间通信

使用信号控制进程

指定一个信号的方法:
- 信号号码(数字标识):kill -1
- 信号完整名称:kill -SIGKILL
- 信号简写名称:kill -TERM或kill -KILL或kill -INT或kill -HUP

kill -l

#查看所有进程

基本进程管理信号
短名称 定义 用途
1 HUP 挂起
2 INT 键盘中断
9 KILL 中断,无法拦截
15
默认值 TERM 终止 导致程序终止。和SIGKILL不同

信号编号ID 短名称 定义 用途
1 HUP 挂起 让一个进程不用重启就可以重读配置文件,并让新的配置信息生效
2 INT 键盘中断 中断一个前台进程。ctrl+c就是用的SIGINT信号
9 KILL 中断,无法拦截 导致立即终止程序。无法被拦截、忽略或处理
15(默认值) TERM 终止,导致程序终止 和SIGKILL,可以被拦截、忽略或处理。要求程序终止的友好方式,允许自我清理

用户可以中断自己的进程,但只有root才能终止由其他人拥有的进程。

kill命令根据ID向进程发送信号。虽其名称为kill,但该命令可用于发送任何信号,而不仅仅是终止程序的信号

在一台虚拟机上建立两个ssh连接端口

kill -1(HUP)

端口1:

[root@wcluser ~]# sleep 100

端口2:

root@wcluser ~]# kill -1 1722
[root@wcluser ~]# ps -ef | grep sleep
root       1729   1657  0 09:04 pts/0    00:00:00 sleep 100
root       1731   1678  0 09:04 pts/1    00:00:00 grep --color=auto sleep
[root@wcluser ~]# kill -1 1729

端口1结果:

kill -2(INT)

端口1:

[root@wcluser ~]# sleep 800

端口2:

[root@wcluser ~]# ps -ef | grep sleep
root       1738   1657  0 09:12 pts/0    00:00:00 sleep 800
root       1740   1678  0 09:12 pts/1    00:00:00 grep --color=auto sleep
[root@wcluser ~]# kill -2 1738

端口1结果:

kill -9(KILL)

端口1:

[root@wcluser ~]# sleep 500

端口2:

[root@wcluser ~]# ps -ef | grep sleep
root       1745   1657  0 09:16 pts/0    00:00:00 sleep 500
root       1747   1678  0 09:16 pts/1    00:00:00 grep --color=auto sleep
[root@wcluser ~]# kill -9 1745

端口1结果:

kill -15(TERM)

端口1:

[root@wcluser ~]# sleep 700

端口2:

[root@wcluser ~]# ps -ef |grep sleep
root       1753   1657  0 09:19 pts/0    00:00:00 sleep 700
root       1755   1678  0 09:19 pts/1    00:00:00 grep --color=auto sleep
[root@wcluser ~]# kill -15 1753

端口1结果;

通过通配符直接指定进程
kill -信号编号 $(pidof 进程名称)

[root@wcluser ~]# kill -9 $(pidof sleep)

结果:

[root@wcluser ~]# sleep 300
已杀死
[root@wcluser ~]# kill -15 $(pidof vim)

结果:

[root@wcluser ~]# vim /root/passwd
Vim: Caught deadly signal TERMVim: Finished.已终止
[root@wcluser ~]#

IO负载

查看核心数

[root@yukino ~]# grep 'model name' /proc/cpuinfo
model name  : Intel(R) Core(TM) i5-8300H CPU @ 2.30GHz
#由于这是虚拟机中的系统,所以显示的是物理机的cpu

一些UNIX系统仅考虑CPU使用率或运行队列长度来指示系统负载。由于具有空闲CPU的系统可能会因为磁盘或网络资源忙而遇到很长时间的等待,因此Linux负载平均值中包含了对I/O的考量。遇到负载平均值很高但CPU活动很低时,请检查磁盘和网络活动。

uptime

[root@yukino ~]# uptime 23:56:09 up 8 min,  1 user,  load average: 0.00, 0.05, 0.05#load averages:表示负载平均值#0.00:最近一分钟负载情况#0.05:最近五分钟负载情况#0.05:最近十五分钟负载情况

实时监控

top

-d           #设置延迟时长,top -d 1表示每隔1秒刷新一次,默认每隔5秒刷新
-b          #批模式翻屏显示,默认只实时显示一屏,若要显示后面的进程信息则可使用-b选项,与-n #合用,可指定显示翻#屏

top -d

[root@yukino ~]# top -d
top: -d requires argument
[root@yukino ~]# top -d 30
top - 00:06:26 up 19 min,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 217 total,   2 running, 215 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.6 id,  0.0 wa,  0.1 hi,  0.1 si,  0
MiB Mem :   1806.2 total,   1336.8 free,    215.9 used,    253.5 buff/cach
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   1433.7 avail MemPID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ 1639 root      20   0       0      0      0 I   0.2   0.0   0:00.90 1003 root      20   0  249256  14764  12868 R   0.1   0.8   0:01.18 1100 root      20   0  217256   6332   4172 S   0.0   0.3   0:00.13 1 root      20   0  176384  10808   8212 S   0.0   0.6   0:01.61 2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 8 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 9 root      20   0       0      0      0 S   0.0   0.0   0:00.04 10 root      20   0       0      0      0 I   0.0   0.0   0:00.10 11 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 12 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 13 root      20   0       0      0      0 S   0.0   0.0   0:00.00 15 root      20   0       0      0      0 S   0.0   0.0   0:00.00 16 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 17 root      20   0       0      0      0 S   0.0   0.0   0:00.00 18 root      20   0       0      0      0 S   0.0   0.0   0:00.00 19 root      20   0       0      0      0 S   0.0   0.0   0:00.00 20 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 21 root      20   0       0      0      0 S   0.0   0.0   0:00.00 22 root      25   5       0      0      0 S   0.0   0.0   0:00.00 23 root      39  19       0      0      0 S   0.0   0.0   0:00.01 24 root       0 -20       0      0      0 I   0.0   0.0   0:00.00

top命令各项参数意义:

load average:1分钟,5分钟,15分钟load average    //CPU队列中等待运行的任务的个数
cpu(s):多颗CPU平均负载,按1键显示每颗CPU平均负载。us  //表示用户空间;sy  //表示内核空间;ni  //表示调整nice值,CPU占用的比率;id  //表示空闲百分比;wa  //表示等待IO完成所占据的时间百分比;hi  //表示hard interrupt,硬件中断占据的时间百分比;si  //表示软中断占据的时间百分比;st  //表示steal,被虚拟化技术偷走的时间(比如运行虚拟机)
PR      //优先级
NI      //nice值
VIRT    //虚拟内存集
RES     //常驻内存集
SHR     //共享内存大小
S       //进程状态top命令交互式子命令:M   //根据驻留内存大小进行排序,默认根据CPU百分比排序P   //根据CPU使用百分比进行排序T   //根据累计时间(占据CPU时长)进行排序l   //是否显示平均负载和启动时间t   //是否显示进程和CPU状态相关信息m   //是否显示内存相关信息c   //是否显示完整的命令行信息q   //退出top命令k   //终止某个进程1   //显示所有CPU的信息s   //修改刷新时间间隔

top -b -n 1
#显示一屏的参数;后面的数字表示需要显示屏幕的页数

Linux进程管理(redhat 8.0)相关推荐

  1. Linux进程管理 (7)实时调度

    关键词:RT.preempt_count.RT patch. 除了CFS调度器之外,还包括重要的实时调度器,有两种RR和FIFO调度策略.本章只是一个简单的介绍. 更详细的介绍参考<Linux进 ...

  2. Linux—进程管理

    1. 进程的概念 Linux是一个多用户多任务的操作系统.多用户是指多个用户可以在同一时间使用同一个linux系统:多任务是指在Linux下可以同时执行多个任务,更详细的说,linux采用了分时管理的 ...

  3. Linux 进程管理工具

    Linux进程管理命令:     pstree.ps.top.pidof.htop.glances.pmap.vmstat.dstat.kill.pkill.job.bg.fg.nohup.pgrep ...

  4. linux进程管理命令实验,实验2Linux进程管理.doc

    实验2Linux进程管理 实验2 Linux进程管理 实验目的 1.加深对进程概念的理解,明确进程和程序的区别 2.进一步认识并发执行的实质 3.分析进程争用资源的现象,学习解决进程互斥的方法 实验性 ...

  5. linux进程管理fork,Linux -- 进程管理之 fork() 函数

    一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同.相当于克隆了一个自己. Test1 f ...

  6. Linux进程管理之ps的使用

    主题Linux进程管理之ps工具的使用 一ps工具的介绍 ps: process state  进程状态 ps - report a snapshot of the current processes ...

  7. linux ps 进程组,linux进程管理(2)---进程的组织结构

    一.目的 linux为了不同的进程管理目的,使用了不同的方法组织进程之间的关系,为了体现父子关系,使用了"树形"图:为了对同一信号量统一处理,使用了进程组:为了快速查找某个进程,使 ...

  8. linux进程管理命令kill,Linux进程管理命令-kill | IT运维网

    格式:kill -l [signal] -l:显示当前系统可用信号 -l:显示当前系统可用信号 [root@localhost ~]# kill -l 1) SIGHUP 2) SIGINT 3) S ...

  9. 操作系统课设之Linux 进程管理

    前言 课程设计开始了,实验很有意思,写博客总结学到的知识 白嫖容易,创作不易,学到东西才是真 本文原创,创作不易,转载请注明!!! 本文链接 个人博客:https://ronglin.fun/arch ...

  10. Linux进程管理与调度-之-目录导航【转】

    转自:http://blog.csdn.net/gatieme/article/details/51456569 版权声明:本文为博主原创文章 && 转载请著名出处 @ http:// ...

最新文章

  1. 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。...
  2. Linux学习总结(四十七)NFS服务配置 上篇
  3. Java数据结构和算法:234树和外部存储
  4. 配置管理之PackageProvider接口
  5. 【bzoj4571SCOI2016美味】
  6. 学容器必须懂 bridge 网络 - 每天5分钟玩转 Docker 容器技术(32)
  7. 财务学python有什么用_学习Python对财务工作者有哪些用途?
  8. 不止代码:恐狼后卫(ybtoj-区间dp)
  9. Symfony1.4.11学习笔记(三):设置虚拟机
  10. RecycleView添加setEmptyView
  11. Prism发布了第一个版本+Entlib3.1在VS2008下工作的解决方案
  12. 米思齐(Mixly for Mac)官方版下载过程以及遇到的问题/解决方法
  13. oracle vm 安装win server 2012 错误0x000000C4
  14. 员工年终绩效考核表模板
  15. 概率统计:离散分布和连续分布
  16. 金山WPS c++ 二面面经
  17. 修行一定要在寺院里吗,出家人离开寺院修行,都属邪门外道吗?
  18. 如何用美剧真正提升你的英语水平(转载)
  19. 第二篇:呈现内容_第三节:CompositeControl呈现
  20. vivo X系列为什么能不断拉高手机上限?

热门文章

  1. 泛函分析 01.01 距离空间-绪论
  2. 第二工业大学计算机应用大专录取分,上海第二工业大学2017年分省分专业录取分数线...
  3. 游戏策划入门教程(前言)
  4. 将linux操作系统迁移到另一个固态硬盘上
  5. js调用一次函数,中间增加一个内容
  6. java 熄灯问题_遍历搜索空间的例子:熄灯问题
  7. 英雄联盟的角色设计思路
  8. 转载 信号量 第六篇
  9. 基于 Verilog 的经典数字电路设计(10)三态门
  10. 家庭服务器搭建,NAS存储