进程查看及管理

    在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

相关推荐

  • LINUX下用户管理命令简述

    LINUX下用户管理命令简述 添加用户并设置密码 useradd [用户名] 创建用户 [root@localhost ~]# useradd jack [root@localhost ~]# cat /etc/shadow | grep jack jack:!!:17257:0:99999:7::: passwd [用户名] 设置密码 [root@loca…

    Linux干货 2017-04-05
  • 计算机的组成及Linux简单介绍

    马哥教育网络班22期第一周练习 计算机概述 进入计算机的世界 计算机 计算机(computer)俗称电脑,是能够按照程序运行,自动、高速出炉海量数据的现代化智能电子设备。由硬件系统和软件系统所组成,计算机的组成遵循冯诺依曼体系。可分为超级计算机、工业控制计算机、网络计算机、个人计算机和嵌入式计算机等五类,较先进的计算机有生物计算机、光子计算机、量子计算机等。…

    Linux干货 2016-08-14
  • linux 中条件测试判断

    文件条件测试判断:   -e 文件存在   -a 文件存在   这个选项的效果与-e相同. 但是它已经被"弃用"了, 并且不鼓励使用.   -f 表示这个文件是一个一般文件(并不是目录或者设备 文件)   -s 文件大小不为零   -d 表示这是一个目录   -b 表示…

    Linux干货 2017-02-02
  • Linux的常用的计划任务(一次任务与周期性任务) at & cron

      在Linux日常维护工作中,维护员不可能每时每刻都守在服务前前,但如果遇到例行的操作要进行怎么办?设定计划任务!     Linux任务计划、周期性任务执行     • 未来的某时间点执行一次任务:      &n…

    Linux干货 2016-09-09
  • linux用户与用户组详解

    LINUX用户与用户组详解     1,用户和用户组文件   在linux中,用户帐号,用户密码,用户组信息和用户组密码均是存放在不同的配置文件中的。分别是 passed gpassd shadow group 中。   在linux系统中,所创建的用户帐号和其相关信息(密码除外)均是存放在/etc…

    Linux干货 2017-07-22
  • Linux启动流程

    Linux的启动流程有以下部分组成,以下流程以CentOs 6.8为例 1、POST加电自检,检测各项硬件工作是否正常,BIOS选择启动设备。 2、根据设备的前446字节,加载bootloader程序 3、initramfs是1.5阶段,intramfs文件是创建系统时生成的文件。intramfs是一个过渡阶段,initramfs加载系统的一些设备驱动,比如…

    2017-05-15