写在前面:

    博客书写牢记5W1H法则:What,Why,When,Where,Who,How。


本篇主要内容:

● 基础概念介绍

    进程优先级

    进程状态

● 进程查看与管理命令

    pstree

    ps

    pgrep/pkill

    pidof

    top

    htop

    vmstat

    pmap

    glances

    dstat

    kill

    killall

● linux作业控制

    nice

    renice

● 网络客户端工具

    ping

    hping

    traceroute

    ftp

    lftp

    lftpget

    wget



基础概念介绍:

   进程(Process):

      运行中的程序的副本。进程存在生命周期。

   线程:

      轻量级的进程。当一个进程中存在可同时执行的不同部分时,开发人员可以将这个进程拆分为多个线程,线程可同时运行在不同的CPU核心上,但同一个cpu不会将隶属于同一进程的不同线程当做不同程序分配更多时间片,所以当线程数超过了CPU核心数,线程就没有了存在的意义。对linux而言,线程与进程的概念比较模糊。

   tase struck:

      linux内核中用来存储进程信息的固定数据结构

   task list:

      多个任务的task struck组件链表

   进程的创建:

      linux在开机的时候,由内核调用init程序创建系统上的第一个进程(PID为1),此进程调用其他服务、建立进程来启动其他服务,此进程将在系统运行的整个过程中一直存在。

      这些在系统引导过程中启动的进程叫做守护进程,他们的运行与终端无关。而其他跟终端相关,通过终端启动的进程,叫做前台进程。当然,我们也可以将前台进程放入后台,以守护进程的模式运行。

      只有init进程能够直接与内核沟通,其他进程必须借助init进程间接的与内核沟通。

      在不同版本的linux中,产生此进程的软件也不同。

         centos5.x:SystemV;

         centos6.x:upstart

         centos7.x:systemd

   进程优先级:

      为了防止某些不太重要的进程过多的占用cpu资源,linux内核支持进程优先级设置,进程优先级越高,在cpu轮训过程中,越容易被cpu执行。

      范围:0-139

         1-99:为实时优先级,不能够手动指定这个范围的值;

         100-139:可通过nice/renice等命令来调节

      nice:

         范围:-20到19,对应进程优先级的100-139

         普通用户只能够调大进程优先级,使进程更少的被cpu执行。

   进程的内存占用:

      内核通过将内存分割成页框(Page Frame),为进程模拟出内存空间,使进程觉得自己是系统上唯一一个进程,可以使用除内核占用之外的所有内存空间。而进程实际占用的进程空间很可能是内存上不连续的页框。

      进程中的部分数据(如指令等信息)必须常驻内存中,这样占用的内存空间称为常驻内存集(RSS);而其他进程调用的数据/共享数据等信息可以放入swap中,这些被称为虚拟内存集(VSZ)。

   进程间通讯(IPC)Inter Process Communication:

      既然内核给进程模拟出内存空间,让其觉得自己是唯一一个进程,那么进程之间如何通讯呢?

      其实进程之间可以通过多种方式彼此通讯:

         同一主机:

            1.发送信号signal

            2.共享内存中通讯shm(shared memory)

            3.semerphor

         不同主机:

            rpc:remote procecure call(远程程序调用)

            socket:通过socket文件,结合网络协议进行

   Linux内核多任务模式:

      抢占式多任务。

   进程状态:

      运行态:Running

      可中断睡眠:interruptable sleeping

      不可中断睡眠:uninterruptable sleeping

      停止态:Stop  暂停在内存中,不会被cpu调用,除非手动启动。

      僵死态:zombie

   进程分类:

      进程根据占用cpu与I/O的频率,可以分为以下两类:

         CPU-Bound:cpu限制型。需要大量占用CPU的进程,如算法进程。

         IO-Bound:I/O限制型。频繁使用I/O的进程,如记事本。


linux系统进程查看及管理命令:

   pstree, ps, pidof, pgrep, top, htop, glances, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup, nice, renice, killall, ...


pstree

   display a tree of processes


ps

   report a snapshot of the current processes.

   ps可以使用3种风格的参数:

      UNIX:包含一个"-"

      BSD:不能包含任何"-"

      GUN:包含"--"

常用组合:

      (1)ps aux  #BSD风格显示系统上所有进程,并以用户为中心组织进程状态信息

         a:所有与用户有关的进程

         x:所有与用户无关的进程

         u:以用户为中心组织进程状态

         输出含义:

            USER:进程用户

            PID:进程号

            %CPU:cpu占用百分比

            %MEM:内存占用百分比

            VSZ:虚拟内存集

            RSS:常驻内存集

            TTY:终端

               ?:与终端无关

            STAT:状态

               R:Runninig

               S:interruptable sleeping 可中断睡眠

               D:uninterruptable sleeping 不可中断睡眠

               T:stopped

               Z:zombie

               +:前台进程

               s:session leader 进程引导者,引导启动其他进程

               l:多线程进程

               <:高优先级

               N:低优先级

            START:进程何时发起的

            TIME:进程占用的CPU时间统计

            COMMAND:发起进程的命令

      (2)ps -ef[H],-eF[H]  #UNIX风格显示系统上所有进程

         -e:显示所有进程;

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

         -F:显示更加完整格式进程信息

         -H:以层级结构显示进程命令(CMD)信息

      (3)ps -eo,axo field1,filed2

         o field... :自定义显示字段,以","分隔


pgrep/pkill

   look up/signal processes based on name and other attributes

   pgrep [options] PATTERN

      这里的PATTERN匹配的是进程名中的部分字段

      -u, --euid euid,...:匹配有效用户

      -U, --uid uid,...:匹配真实用户

      -t, --terminal term,..:匹配终端

      -l, --list-name:显示用户名信息

      -a, --list-full:显示进程的完整信息

      -P, --parent ppid,...:显示指定进程号的子进程


pidof

   find the process ID of a running program.

   与pgrep类似,但必须给出完整的进程名


top

   display Linux processes

   top [OPTIONS]

      -d DELAY-TIME:Delay-time,指定刷新时间,单位为秒

      -b:以批次的方式显示。

      -n NUM:与-b一起使用,指定多少批次

   常用按键:

      排序;

         P:按%CPU列排序

         M:按%MEM列排序

         T:按TIME+列排序

      首部信息显示与隐藏:

         l:top行

         t:Task和%Cpu(s)行

         m:Mem与Swap行

         1:(数字1)%Cpu(s)行显示单个cpu信息

      其他:

         s|d:指定刷新间隔,默认为3秒

         k:kill,给进程发信号

         q:退出

         e:以不同单位显示VIRT、RES、SHR信息,默认单位为Kb

   输出含义:

      第一行的信息的load average表示cpu的队列长度,通常,这个值不超过cpu核心数则表示cpu负载正常。

      %Cpu:

         us:用户空间

         sy:系统空间,即内核空间

         ni:nice

         id:空闲时间

         wa:I/O等待

         hi:处理硬件中断

         si:处理软件中断

         st:被偷走的时间

         cs:上下文切换,即进程切换

      内存:

         VSZ:(Virtual memory SiZe)虚拟内存集(进程以为自己占用的内存空间)

         RSS:(Resident Size)常驻内存集

         SHM:共享内存集

htop

   光盘里没有安装包,需要使用fedora的源进行安装。

      -d --delay=DELA:指定延时时间间隔

      -u --user=USERNAME:只显示指定用户进程

      -s --sort-key COLUMN:按指定字段排序

   常用按键:

      与top大致相同,但多了几个按键

         l:显示选定进程打开的文件列表

         s:跟踪选定进程的系统调用

         t:以层级关系显示个进程状态

         a:将选定进程绑定到某指定CPU核心


vmstat

   Report virtual memory statistics

   vmstat  [options]  [delay [count]]

      -s, --stats:显示内存使用详细

   输出含义:

 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 599692   1500 230960    0    0     8     1   22   37  0  0 100  0  0

      procs:

         r:等待运行的进程个数,cpu上等待运行的队列长度

         b:处于不可中断睡眠的进程个数;被阻塞的任务队列长度

      memory:

         swapd:交换内存使用总量

         free:空闲物理内存总量

         buffer:用于buffer的内存总量

         cache:用于cache的内存总量

      swap:

         si:swap in,进入swap分区的速率(kb/s)

         so:swap out,离开swap分区的速录(kb/s)

      io:

         bi:block in,从块设备读入数据到系统的速率(kb/s)

         bo:block out,写入到块设备的速率(kb/s)

      system:

         in:interrupts,中断速率

         cs:context switch,上下文切换速率,即进程切换速率

      cpu:

         us:user space,用户空间使用率

         sy:system,系统空间使用率

         id:idle,空闲

         wa:wait,I/O等待

         st:stolen,虚拟化技术被偷走的时间


pmap

   report memory map of a process

   根据/proc/PID/maps文件内容输出进程占用内存的地址

   -x, --extended:显示附加格式的信息


glances

   A cross-platform curses-based monitoring tool

   需要自行安装,可远程管控其他主机

   常用选项:

      -b:以Byte为单位显示网上数据速率;

      -d:关闭磁盘I/O模块;

      -m:关闭mount模块;

      -n:关闭network模块;

      -t #:刷新时间间隔;

      -1:每个cpu的相关数据单独显示;

      -o {HTML|CSV}:输出格式;

      -f  /PATH/TO/SOMEDIR:设定输出文件的位置;

   C/S模式下运行glances命令:

      服务模式:

         glances  -s  -B  IPADDR

         IPADDR:本机的某地址,用于监听;

      客户端模式:

         glances  -c  IPADDR

         IPADDR:是远程服务器的地址;


dstat

   versatile tool for generating system resource statistics

   需要自行安装,功能强大

   dstat [-afv] [options..] [delay [count]]

   常用选项:

      -c, --cpu:显示cpu相关信息;

         -C #,#,...,total

      -d, --disk:显示磁盘的相关信息

         -D sda,sdb,...,tobal

      -g:显示page相关的速率数据;

      -m:Memory的相关统计数据

      -n:Interface的相关统计数据;

      -p:显示process的相关统计数据;

      -r:显示io请求的相关的统计数据;

      -s:显示swapped的相关统计数据;

      --tcp 

      --udp

      --raw 

      --socket 

      --ipc 

      --top-cpu:显示最占用CPU的进程;

      --top-io:最占用io的进程;

      --top-mem:最占用内存的进程;

      --top-lantency:延迟最大的进程;

kill

   terminate a process

   向进程发送信号,以实现对进程的管理

   显示系统可用信号:

      kill -l [signal]

   向进程发信号:

      信号标识方法:

         (1)信号数字标识;

         (2)信号完整名称;

         (3)信号简写名称

      向进程发信号:

         kill [-s signal|-SIGNAL] pid...

      常用信号:

         1) SIGHUP:无须关闭进程而让其重读配置文件;

         2)SIGINT:终止正在运行的进程,相当于Ctrl+c

         9)SIGKILL:杀死运行中的进程;

         15)SIGTERM:终止运行中的进程;

         18)SIGCONT:

         19)SIGSTOP:

      补充:kill %# 用来给jobs发信号

killall

   kill processes by name

   killall [-SIGNAL] name


Linux作业控制:

   前台作业(foregroud):

      通过终端启动,且启动后一直占用终端;

   后台作业(backgroud):

      可以通过终端启动,启动后即转入后台运行(不占用终端)

   将作业置于后台:

      (1)运行中的作业按ctrl+z

         注意:作业送到后台会转为停止状态

      (2)尚未运行的作业

         在命令后添加&

      注意:此类作业虽然被送往后台,但依旧与终端有关,当终端停止时,作业也会一起中断。当有输出时,也会默认输出到本终端。

   查看作业命令:

      jobs

   实现作业控制命令:

      fg [%[JOB_NUM]]  将指定作业号的作业调回前台

      bg [%[JOB_NUM]]  通知指定作业号的后台作业继续运行

      kill [%[JOB_NUM]]  终止指定作业

   进程优先级:

      可通过nice值调整的优先级范围:100-139

         分别对应nice值:-20到19

      进行运行时,默认优先级为120,对应nice值为0


nice

   以指定nice值运行命令

   nice [OPTIONS] [COMMAND [ARGS]...]

      -n NICE:指定nice值

   注意:只有管理员可以调低nice值,普通用户只能调高


renice

   修改运行中的进程的nice值

   renice [-n] NICE PID


网络客户端工具:

   ping

      会向目标主机发送ICMP协议包,目标注意也会回送相同大小的包

      ping  [OPTION]  destination

         -c #:发送的ping包个数;

         -w #:ping命令超时时长;

         -W #:一次ping操作中,等待对方响应的超时时长;

         -s #:指明ping包报文大小;

   hping3

      向目标主机发送TCP/IP数据包,用来进行测试

         --fast:快速发送数据包

         --faster:更快发送数据包

         --flood:能多快就多快的发送数据包

         -i uX:发送数据包时间间隔

   traceroute

      跟踪源主机到目标主机之间经过的网关

   ftp

      ftp: File Transfer Protocol

      ftp服务命令行客户端工具;

   lftp

      lftp  [-p port]  [-u user[,pass]] [site]

      get, mget

      put, mput

      rm, mrm

   lftpget

      lftpget [-c] [-d] [-v] URL [URL...]

      -c:继续此前的下载;

   wget

      The non-interactive network downloader.

      wget [option]... [URL]...

         -b:在后台执行下载操作;

         -q:静默模式,不显示下载进度;

         -O file:下载的文件的保存位置;

         -c:续传;

         --limit-rate=amount:以指定的速率传输文件;