进程查看及管理

    在Linux系统中,触发任意一个事件时,系统都会将它定义为一个进程,并且给予这个进程一个ID,称为PID,同时依据触发这个进程与用户相关的属性关系,给予这个PID一组有效的权限设置。

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

线程是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。

线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。

操作系统中最小的资源分配单位就是进程了,从系统启动的那一刻起,就有一个个服务在被启动起来,而每个进程都与其定义的发起者权限相关联,所以我们的进程也会沿用我们定义的权限关系。

所以包括我们在shell中执行任务开启的子进制,也会沿用父进程的权限。

程序彼此之间是有相关性的!以下面的图示来看,连续运行两个 bash 后,第二个 bash 的父程序就是前一个 bash。因为每个程序都有一个 PID ,那某个程序的父程序该如何判断?就透过 Parent PID (PPID) 来判断即可。子进程可以取得父进程的环境变量,有时候杀掉一个进程,过段时间又出现的话,如果不是crontab定时任务的话,那么很有可能就是它的父进程又创建了它哦。

进程可以分为守护进程和用户进程:

    守护进程(daemon),在系统引导过程中启动的进程,与终端无关;

    用户进程,也称前台进程,通过终端启动的进程,与终端相关;

进程的运行状态:

    运行态:running    

    就绪态(睡眠态):ready,又可分为可中断(interruptable)和不可中断(uninterruptable);

    停止态:stoped,暂停于内存中,但不会被调度,除非手动启动;

    僵死态:zombie,父进程结束前,子进程不会结束;

进程根据消耗的资源分类,可以分为:    

    cpu-bound:CPU密集型的,消耗很多的cpu资源

    io-bound:IO密集型,消耗很多的IO资源

进程的查看:

   

    ps命令查看:可以跟3种格式:短参数带"-",长参数形式“–”以及不带“-”形式。

        不带“-”形式有:

            a:显示所有与终端相关的进程

            x:显示所有与终端无关的进程

            u:以用户为中心组织进程状态信息显示

            f:显示进程的父进程

            o:显示定制的信息

        常用选型aux,即 “ps aux”,显示如下:

blob.png

            第一行显示字段:USER 发起该进程的用户;PID 进程的进程id; %cpu  进程的当前cpu使用率; %MEM 进程的占用物理内存的比例; VSZ 虚拟内存集; RSS 真实分配内存,常驻内存集,不能交换到交换空间去;TTY 该进程运行在的终端号;STAT 当前状态,其中有很多的状态。运行态(R)、可终端睡眠(S)、不可终端睡眠(D)、停止(T)、僵死态(z)、前台进程(+)、多线程进程(l)、低优先级进程(N)、高优先级进程(<)、回话主导者(s); START  发起进程的时间点;COMMAND 进程程序名。

        带“-”的选项

            -e:显示所有进程,相当于ax

            -f/-F:显示完整格式的进程信息

            -H:以层级结构显示进程的相关信息

        常用选项为-efH

pgrep [options] pattern

    -u <uid> :显示有效用户的进程

    -U <username>:显示指定用户的进程

    -t <终端名>: 显示指定的终端相关的进程

    -l: 显示进程名

    -a: 显示完整格式的进程名

    -P pid:显示指定pid的子进程

pidof <进程名>: 根据进程名字取其pid

top命令:以动态刷新的方式显示当前系统进程信息,如图:

blob.png    

    图中黄色框内第一行显示的内容分别为当前系统时间、系统已经运行了多长时间、过去1分钟、5分钟和15分钟的平均负载;第二行显示的任务数量以及任务的分布情况,需注意的是如果出现zombie前面的数字长时间不为0的话,就需要查看进程状态,找出该僵死进程;第三行为cpu的使用情况:用户空间使用率(us),系统空间使用率(sy),调整nice值的cpu使用率(ni),空闲比例(id),等待时间比例(wa),硬件中断占用率(hi),软件终端cpu使用率(si),被偷走(如使用虚拟化技术)的cpu比例(st)。第4和5行分别是内存和交换空间的使用情况。椭圆框内分别列出的是进程id(pid)、发起进程的用户(USER)、优先级(PR)、nice值(NI)、线性内存使用大小(VRTZ)、常驻内存大写哦(RES)、空闲内存大小(SHR)、cpu使用率(%CPU)、内存使用率(%MEM)、从进程开始所使用的cpu时间(TIME+)以及命令名称(COMMAND)。

    在top命令运行的过程中,可以按"P"查看cpu占用率排序,“M”内存排序,“T”累计占用cpu时间排序,“l”显示或者不显示第一行的内容,“t”显示或者不显示任务以及cpu的统计信息,“m”调整内存统计信息的显示。按“s”调试刷新数据的时间间隔,默认为3s,按“k”提示输入pid,杀掉指点的pid的进程。

    top命令常用选项:-d# 指定刷新时间间隔;-b 以批次方式显示;-n #  显示多少批次。  

    htop命令,top命令的扩展,使用图形的方式显示。如图:

blob.png

    通过下面的菜单可以调整显示的内容和方式,接口更友好。在运行的过程中按“l”显示指定进程打开的文件;“a”将选定的进程绑定指定的cpu核心;“s”跟踪指定进程发起的系统调用;“t”以层级关系显示进程状态。

    vmstat命令:显示虚拟内存状态:

blob.png

    图中procs字段:r代表等待运行的进程个数(cpu上等待运行的任务的队列长度),b代表处于不可终端的睡眠态的进程个数(被阻塞的任务队列的长度);

    memory字段:swpd表示交换空间使用总量(如果使用过大,考虑增加内存);free表示空闲的物理内存总量;buffer表示用于缓冲的内存总量;cache表示用户缓存的内存总量;

    swap字段:si表示数据进入swap的数据速率(kb/s);so表示数据离开swap的速率(kb/s)

    io字段:bi表示从块设备读入数据到系统的速度(kb/s);bo表示保存数据到块设备的速率(kb/s)

    system字段:in表示中断速率;cs(centext switch)表示上下文切换速率

    cpu字段:us表示用户空间占用cpu比例;sy表示系统空间占用cpu比例;id表示空闲时间比例;wa表示等待时间比例;st代表被偷时间比例.

    常用选项-s ,显示内存统计数据

    pmap命令用来查看指定进程的内存映射表,用法为 pmap [options] pid…

    常用选项-x:指定进程的扩展信息,相当于cat /proc/PID/maps

    glances命令,基于视窗的交叉平台的监控工具,命令显示为:

blob.png

    详细显示了cpu、任务、网络、硬盘、分区和进程的情况,用”h“获得帮助列表,常用的选项有-b:以字节为单位显示网卡的数据速率;-d:关闭磁盘I/O模块 -n :关闭网络模块 -t #:指定刷新时间;-m 关闭mount模块; -1 每个cpu的数据单独显示; -f /PATH/TO/SOMEFILE 设定输出文件的位置。

    该命令常用C/S模式运行:服务端:glances -S -B IPADDE(本机地址); 客户端:glances -C IPADDR(远程主机ip)。 

    dstat命令:功能强大的系统资源统计工具,用法:

        dstat # ##: #表示刷新时间,##为显示次数;

        -c:cpu状态    -d:磁盘状态    -i:中断的信息    -m:内存的信息    -p:进程状态     -n:网络接口的统计数据    -s:swap的统计信息    –aio:异步IO的统计信息    –ipc:进程间通讯的相关信息    -g:page页的相关统计    –tcp:tcp相关的统计信息    –udp:udp相关的统计信息    –top-cpu:最占用cpu的进程  –top-io:最占用IO的进程    –top-mem:最占用内存的进程    –top-lantency:延迟最大的进程。如果不指定选项,默认显示如下:

blob.png

    上面的内容讲述如何查看进程及其状态,下面我们就来讨论进程的管理。如何管理进程内,在linux系统中,通过IPC的方式进行管理,即进程间通信。到底有哪些信号呢,使用”kill -l“命令查看

blob.png

    这么多的信号,挑选常用的来演示。1)SIGHUP 无须关闭进程而让其重读配置文件 2)SIGINT 终止正在运行的进程,相当于Ctrl+c 9)SIGKILL 强行杀掉运行中的进程  15)SIGERM 终止正在运行的进程  18)SIGCONT 继续运行 19)SIGSTOP 后台休眠。

    使用格式为:kill [-s singal|-SINGAL] pid…如要杀掉某进程kill -9 PID或者kill -SIGKILL PID。

    kill后面跟的是PID,指定的是某一个进程,某些程序在运行的时候,会产生很多进程。要想杀死该程序发起的多个进程,用kill就比较麻烦。解决这个问题,可以使用killall命令,它可以杀死一个进程集。用法是killall PIDNAME。

    系统在运行过程中,每时每刻都有很多进程在后台,有的运行,有的睡眠,有的等待。那么,系统怎么知道下一刻需要运行什么进程,调度的优先级怎么确定的呢。实际上,系统给每个进程打上了一个标签,区分每个进程的优先度的。这个就是优先级。

blob.png

    图中框内的PRI和NI就是确定进程优先级的数值。PRI是内核自己调整的,用户无法去调整该值,但是可以调整NI(nice)值去影响PRI的值,从而达到调整PRI的目的。nice值的范围为-20~19,管理员可以调整自己或者其他的人的nice值,而一般用户只能调整自己进程的nice值,并且范围为0~19,而且只能将nice值往大的调整,不能往小的调整。

   在程序运行前指定nice值:nice -n [COMMAND]。如使用命令nice -了3 ping 127.0.0.1 & 可以是ping命令在后台以nice值为3运行。

    

blob.png

    调整正在运行的程序的nice值:renice -n # pid 

     使用ping命令,使用的时候NI如下,

blob.png

    使用命令renice -n -6 10131后,优先级和nice值为:

blob.png

    

 作业控制

    Linux系统的作业可以分为前台作业和后台作业。前台作业是通过终端启动,且启动后一直占据终端;后台作业是不通过终端启动或者是通过终端启动后转入后台运行。可以有两种方式让程序运行于后台:1、在运行中的作业,通过Ctrl+z命令将其送入后台,但是在后台是停止状态;2、在运行命令时加上”&“,如vim&可以让命令直接后台运行。

    注意:后台运行的程序仍然与终端相关,如果终端关闭,与该终端相关的后台程序也会被关闭。如果要想后台程序与终端剥离开来,可以使用”nohup COMMAND &“或者”screen;COMMAND“实现。

    使用命令jobs查看所有的后台作业:

blob.png

    如上图,有两个后台作业,一个在运行,一个停止,[#]为后台作业的编号。fg命令可以将指定的后台作业调回前台运行,如上图,将vim调回前台运行使用命令:fg %2(%可以省略)。有些进入后台的程序处于停止状态,要想让其在后台继续运行,可以使用命令:bg %#(%可省略),其中#为后台作业编号;想要终止后台作业:kill %#(此处%不能shenglve)#为后台作业标号。

原创文章,作者:王更生,如若转载,请注明出处:http://www.178linux.com/60799

(0)
王更生王更生
上一篇 2016-11-27 16:04
下一篇 2016-11-27 16:25

相关推荐

  • 马哥教育网络班22期+第6周课程练习

    请详细总结vim编辑器的使用并完成以下练习题 vim: 模式化的编辑器 基本模式:     编辑模式:命令模式     输入模式:     未行模式:内置的命令行接口 打开文件:      …

    Linux干货 2016-09-26
  • Linxu系统的启动过程

    Linxu系统的启动过程 启动流程 1、引导Linux启动是从BIOS中的地址0xFFFF0处开始的,BIOS由两部分组成:POST代码和运行时服务,运行时服务是为操作系统提供一些接口,如温度检测等。 BIOS的第一个步骤是加电自检(POST),完成对硬件的的检测,如某些硬件出现错误无法通过检测就导致系统无法启动,POST完成之后将被清出内存; BIOS的第…

    Linux干货 2016-09-13
  • yum命令用法及源码的编译

     一:yum 何为yum? yum是rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,是up2date 的替代工具。 1.命令格式:     yum [options] [command] [package …] 2.yum客户端配置文件: 公共配置文件:/etc/yum.conf   &…

    Linux干货 2017-08-19
  • Linux进程管理之“四大名捕”

    一、四大名捕 四大名捕,最初出现于温瑞安创作的武侠小说,是朝廷中正义力量诸葛小花的四大徒弟,四人各怀绝技,分别是轻功暗器高手“无情”、内功卓越的高手“铁手”、腿功惊人的“追命”和剑法一流的“冷血”本文四大名捕由linux命令所出演      无情:ps     出演      铁…

    Linux干货 2016-04-25
  • 马哥教育网络班22期第二周课程练习1-未闻花名

    1、Linux管理文件和目录的命令 命令 功能 命令 功能 pwd 显示当前目录 ls 查看目录下的内容 cd 改变所在目录 cat 显示文件的内容 grep 在文件中查找某字符 cp 复制文件 touch 创建文件 mv 移动文件 rm 删除文件 rmdir 删除目录 1.1 pwd命令 该命令的英文解释为print working directory(打…

    Linux干货 2016-08-22
  • N–25期 第九周作业

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash declare -i sumlogin=0 declare -i sumnologin=0 for i …

    Linux干货 2017-03-07