我们的知道进程是程序的实例,进程是程序向操作系统申请资源(如内存空间和文件句柄等)的基本单位。而线程是进程中可独立执行的最小单位,一个进程中可包含很多线程。而该进程中的所有线程共享着该进程申请的资源。进程就是正在执行的程序。而在Linux中,可以使用一个进程来创建另外一个进程。这样的话,Linux的进程的组织结构其实有点像Linux目录树,是个层次结构的,可以使用pstree命令来查看(如图1)。在最上面是init程序的执行进程。它是所有进程的老祖宗。Linux提供了两个函数来创建进程同,分别是fork()和execle();

图1:

一、进程的七种状态

(1)、R运行状态(runing):并不意味着进程一定在运行中,也可以在运行队列里;
      (2)、S睡眠状态(sleeping):进程在等待事件完成;(浅度睡眠,可以被唤醒);
      (3)、D磁盘睡眠状态(Disk sleep):不可中断睡眠(深度睡眠,不可以被唤醒,通常在磁盘写入时发生);
      (4)、T停止状态(stopped):可以通过发送SIGSTOP信号给进程来停止进程,可以发送SIGCONT信号让进程继续运行;
      (5)、X死亡状态(dead):该状态是返回状态,在任务列表中看不到;
      (6)、Z僵尸状态(zombie):子进程退出,父进程还在运行,但是父进程没有读到子进程的退出状态,子进程进入僵尸状态;
      (7)、t追踪停止状态(trancing stop);

查看进程的状态命令:ps aux | grep pid | grep -v grep

如图:查询的是sshd进程的状态

    PS: 僵尸进程的危害  
        1 上面说到僵尸进程是由于父进程没有读取到子进程的退出信息而产生的,那么我们是不是就可以理解为父进程一直以为处于僵尸状态的子进程是没有退出的。而进程是需要维护的,僵尸进程就会一直需要PCB对其进行维护;
       2 浪费内存资源。如果僵尸进程一直没有退出,就会一直占用这块内存,就会导致内存资源的浪费;
       3 内存泄漏。僵尸进程一直占用资源,但是却不使用,就可能会导致内存泄漏。

二、进程的优先级

分别为nice值和Priority值

当我们使用top命令查询进程时,如图红色框中的值即是nice值和Priority

1) nice值
             反应一个进程“优先级”状态的值
             取值范围是 -20 ~ 19, 40个级别
             nice值越小,“优先级”越高
     2)  Priority值
             优先级值
             linux上实现了140个优先级范围,取值是从0~139
             0 ~ 99表示实时进程;100 ~ 139表示非实时进程

三、进程操作的常用命令

1、常用的进程动态查看命令ps

1)、常用命令组合 ps aux ,该命令组合和ps -ef组合功能一样

a:与终端有关的进程,用户通过终端启动,退出shell时,进程会终止。
                x:与终端无关的进程,系统启动过程中自动启动的进程。
                u:以用户为中心组织进程状态显示

2、常用top命令

1)、语法:top [options]

2)、参数:

-d #:指定刷新时间间隔,默认5秒

     -n #:指定刷新批次,即指定刷新次数,刷新完成后自动退出

     -b:以批次方式显示

3)、当使用top命令输出时,可以使用如下命令对输出结果进行操作

a、排序相关
                    P:占CPU百分比%CPU排序
                    M:占内存百分比%MEM排序
                    T:累计占用CPU时间TIME+排序

b、 开关相关
                    l:第一行uptime信息开关
                    t:第二行tasks和第三行cpu信息开关
                    m:第四行mem和第五行swap信息开关

4)、top 查询结果前5行参数详细说明

第 一行 分别显示:系统当前时间 系统运行时间 当前用户登陆数 系统负载。*系统负载(load average),这里有三个数值,分别   是系统最近1分钟,5分钟,15分钟的平均负载。一般对于单个处理器来说,负载在0 — 1.00 之间是正常的,超过1.00就要引起注意了。在多核处理器中,你的系统均值不应该高于处理器核心的总数。
           第二行 分别显示:total进程总数、 running正在运行的进程数、 sleeping睡眠的进程数、stopped停止的进程数、 zombie僵尸进程数。 
           第三行分别显示:
               %us 用户空间占用CPU百分比、
               %sy 内核空间占用CPU百分比、
               %ni 用户进程空间内改变过优先级的进程占用CPU百分比、
               %id 空闲CPU百分比、
               %wa 等待输入输出(I/O)的CPU时间百分比 、
               %hi指的是cpu处理硬件中断的时间、%si指的是cpu处理软中断的时间 、
               %st用于有虚拟cpu的情况,用来指示被虚拟机偷掉的cpu时间。
                通常id%值可以反映一个系统cpu的闲忙程度。
       第四行 MEM :total 物理内存总量、    used 使用的物理内存总量、free 空闲内存总量、    buffers 用作内核缓存的内存量。
       第五行 SWAP:total 交换区总量、     used 使用的交换区总量、free 空闲交换区总量、 cached 缓冲的交换区总量。
 
       PS:buffers和cached的区别需要说明一下,buffers指的是块设备的读写缓冲区,cached指的是文件系统本身的页面缓存。它们都是linux操作系统底层的机制,目的就是为了加速对磁盘的访问。

5)、使用top命令得到的结果及列的参数说明

红色框里的值对应代表意思如下:

PID:进程号
           USER:进程属主
           PR:priority 的简写,进程优先级
           NI:nice的简写,与PR值联合控制进程的优先级
           VIRT:进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
           RES:进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
           SHR:共享内存大小,单位kb
           S:进程状态。
           %CPU:CPU使用率。
           %MEM:内存使用率。
           TIME+:CPU使用时间累和,即进程一共占用CPU多久
           COMMAND:进程对应的命令

3)、pgrep命令

常用参数:

-o:仅显示找到的最小(起始)进程号; 
               -n:仅显示找到的最大(结束)进程号; 
               -l:显示进程名称; 
               -P:指定父进程号; 
               -g:指定进程组; 
               -t:指定开启进程的终端; 
               -u:指定进程的有效用户ID。

4)、pstree命令

pstree指令用ASCII字符显示树状结构,清楚地表达程序间的相互关系。如果不指定程序识别码或用户名称,则会把系统启动时的第一个程序视为基层,并显示之后的所有程序。若指定用户名称,便会以隶属该用户的第一个程序当作基层,然后显示该用户的所有程序。

常用参数:

-a  显示每个程序的完整指令,包含路径,参数或是常驻服务的标示。
   -c  不使用精简标示法。
   -G  使用VT100终端机的列绘图字符。
   -h  列出树状图时,特别标明现在执行的程序。
   -H<程序识别码>  此参数的效果和指定"-h"参数类似,但特别标明指定的程序。
   -l  采用长列格式显示树状图。
   -n  用程序识别码排序。预设是以程序名称来排序。
   -p  显示程序识别码。
   -u  显示用户名称。
   -U  使用UTF-8列绘图字符。
   -V  显示版本信息。

四、进程的停止

kill命令的理解与运用

作用:用来终止一个进程

原理: kill命令的工作原理是,向Linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。比如在top命令中,我们看到系统运行许多进程,有时就需要使用kill中止某些进程来提高系统资源。

我们可以使用kill -l命令查询出kill命令可选参数列表,如下图:

下面是常用的信号及解释:

代号 名称 内容
1 SIGHUP 启动被终止的程序,可让该进程重新读取自己的配置文件,类似重新启动。
2 SIGINT 相当于用键盘输入 [ctrl]-c 来中断一个程序的进行。
9 SIGKILL  代表强制中断一个程序的进行,如果该程序进行到一半,那么尚未完成的部分可能会有“半产品”产生,类似 vim会有 .filename.swp 保留下来。
16 SIGTERM  以正常的方式来终止该程序。由于是正常的终止,所以后续的动作会将他完成。不过,如果该程序已经发生问题,就是无法使用正常的方法终止时,输入这个 signal 也是没有用的。
19 SIGSTOP 相当于用键盘输入 [ctrl]-z 来暂停一个程序的进行。  

常用命令:

a、kill -15 pid

这条命令发信号让进程正常退出。所谓的正常退出是指按应用程序自己的退出流程完成退出,这样就可以清理并释放资源。比如 vim 程序,如果是正常的退出,就会删除掉临时文件 *.swp。
既然信号 15 是退出进程的正确方式,那它也应该是最常用的方式,因而我们可以省略参数 -15。

b、kill pid

这条命令和上面的命令是等价的,kill 命令默认发送信号 15 给目标进程。
当进程出现了异常状况,不能通过信号15正常退出时,我们就需要通过非常的手段直接终结掉进程。所谓的非常手段就是传递信号 9 给目标进程!

  c、kill -9 pid

这样结束掉的进程不会进行资源的清理工作,所以如果你用它来终结掉 vim 的进程,就会发现临时文件 *.swp 没有被删除。

    PS:使用信号 15 是安全的,而信号 9 则是处理异常进程的最后手段,请勿滥用。

五、工作中常用的命令组合实例

1、以树形结构查询一个进程的所有子进程命令: ps -p pid

2、查询出某个服务的进程运行状态,包括cpu等相关信息,可使用ps aux | grep pid/服务名称  和ps ef | grep pid/服务名称   

3、查询出系统中所有cpu使用情况: 使用top命令列出结果后,在按数字1展开cpu信息列表,还可以使用t键以不同的形式查看结果

4、如何正确的停步一个进程,我们可以使用 kill -15 ill -15 pid来正常停步。

5、在java项目中,我们如何使用java提供的工具来管理和查看进程执行情况呢。这里介绍一个名叫jstack的命令工具。

a、命令jstack -l pid时可以查看进程中的线程运行情况,如图:

b、也可以使用命令jstack pid > cpu0414.log 把结果生成文件下载下来阅读。

6、如何查询出一个进程的所有子进程,包括运行详细信息。我们可以使用命令top -p 26324 -H,结果如下:

     ​​​​​​​

Linux系统进程的理解与相关命令的使用系列相关推荐

  1. 20-Linux系统进程与计划任务相关命令详解整合

    系统进程与计划任务相关命令详解整合 at at命令用于在指定时间执行命令.它能够接受在当天的hh:mm(小时:分钟)式的时间指定.假如该时间已过去,那么就放在第二天执行. 也能够使用midnight( ...

  2. linux轮训创建文件夹,Linux文件和目录管理相关命令(三)

    通过前两篇的文章分享大家是否对Linux文件和目录管理的相关命令有所了解了呢?今天小编将继续为大家带来Linux文件和目录管理相关命令的第三篇文章,想要做Linux运维工程师的小伙伴,来看一看,希望能 ...

  3. linux实验二目录与文件查看相关命令,Linux文件和目录管理相关命令(二)

    今天小编将继续为大家带来Linux文件和目录管理相关命令的文章,想要做Linux运维工程师的小伙伴,来看一看,希望能对你有帮助哦~ 一 查看文件内容 上面提到的一些命令例如ls只是用来显示文件的属性与 ...

  4. oracle 格式化命令,Linux下硬盘格式化的相关命令Partprobe

    Linux下硬盘格式化的相关命令Partprobe [root@db ~]# fdisk /dev/sdb The number of cylinders for this disk is set t ...

  5. Linux查询端口和进程相关命令

    Linux查询端口和进程相关命令 https://www.cnblogs.com/zjdxr-up/p/8408885.html 香吧香 博客园 首页 联系 管理随笔 - 247 文章 - 4 评论 ...

  6. Linux虚拟机的启动及相关命令

    Linux虚拟机的启动及相关命令 1.Linux是什么?作为一名初学者,我之前也简单的认为它是一个类似Windows的操作系统,但后来经过进一步学习,才知道,Linux是内核,Linux内核加上GUN ...

  7. linux添加源ip路由命令,linux添加ip、路由相关命令

    1- Linux添加永久路由 vi /etc/sysconfig/network-scripts/route-eth1 ADDRESS0=192.168.10.0 NETMASK0=255.255.2 ...

  8. linux下常见的网络相关命令

    linux中环境部署.网络排查要用到非常多的命令,掌握一些核心的相关命令非常有必要.下面介绍几个工作和面试中高频提及的网络相关命令. ifconfig ifconfig 是一个用来查看.配置.启用或禁 ...

  9. Linux查看所有用户与住目录,Linux查看所有用户的相关命令

    1.Linux里查看所有用户 (1)在终端里.其实只需要查看 /etc/passwd文件就行了. (2)看第三个参数:500以上的,就是后面建的用户了.其它则为系统的用户. 或者用cat /etc/p ...

最新文章

  1. JNI调用c++函数,该函数的参数是结构体(——对象的传递)
  2. 如何发送Head请求
  3. mybatis mysql 导入_MyBatis Mysql 批量插入
  4. web开发中常用的算法和函数
  5. java get null_java 获取对象中为null的字段实例代码
  6. curl 伪装来路(referer)
  7. CentOS6.X安装QQ2012
  8. Hotpatching a C Function on x86
  9. 简单的POST sql注入
  10. 杨中科:【我的大学生活】
  11. 网格划分——Mesh操作
  12. 切割图片基于人脸识别选出人脸部分
  13. uni-app表情包实现
  14. Fantastic Four: 具有恶意安全的诚实大多数四方安全计算
  15. 实用的it知识学习_IT榜样 | 寇宇宸:认真听讲是学习知识的绝佳途径
  16. spring定时任务总结
  17. Java切图或者判断是不是纯色图片
  18. Trustonic,Rubean和CCV宣布合作开发mPOS(移动销售终端)解决方案以实现商用设备上的密码安全输入
  19. Teamcenter配置
  20. kingdee漏洞金蝶EAS存在命令执行漏洞

热门文章

  1. Minecraft 1.16 简易高效的自动钓鱼脚本
  2. c# 读hex_C# Hex编码和解码
  3. 酒店在线订房小程序开发解决方案
  4. 32位汇编语言学习笔记(45)--测试简单文件操作接口(完)
  5. 列表 元祖 字典
  6. 【数据结构】图-图的遍历_深度优先遍历(动态图解、c++、java)
  7. Android studio给备忘录添加背景音乐
  8. 【计算机网络实验】动态路由协议——华为eNSP(详细实验报告+代码)
  9. 汾阳市教师招聘中职计算机真题,2019年山西省吕梁市汾阳市中小学语文教师招聘/编制考试历年真题试卷及答案解析...
  10. Shiro权限管理框架详解