首页 > 代码库 > Linux--进程管理

Linux--进程管理

1.什么是进程:

  简单的说,进程是程序的执行实例,即运行中的程序,同时也是程序的一个副本;程序是放置于磁盘的,而进程是位于内存中的。


2.进程的分类:

  (1)按照进程的启动方式:

    守护进程:

      Daemon:通常是在系统引导的时候被启动的,与任何的终端控制台无关,也可以通过终端启动

    用户进程:

      用户登录到系统后,通过终端启动的进程


  (2)按照进程的运行位置:

    前台进程:

      在启动进程后,进程一直占有标准输出,或者标准输入,或者同时占用标准输入和标准输出

    后台进程:

      在进程启动之后,不占有标准输入和标准输出的进程


  (3)按照进程对于资源消耗:

    CPU-Bond:

      非交互式的进程,

    IO-Bond:

      编辑器等各种交互式


3.进程的优先级:

  0-139一共分为140个等级

  0保留

  1-99:实时优先级,数字越大优先级越高,在系统启动时启动的进程

  100-139:静态优先级,数字越小,优先级越高,在用户执行某些应用程序的时候,启动的进程

  nice值:-20到19,共40个,默认nice值为0,只有管理员才能使用负数的值,以提升进程的优先级,普通用户只能使用正整数的nice值,以降低进程的优先级


4.Linux系统上与进程有关的命令(查看命令和管理命令)

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


  ps [options]:

    常用选项:

    BSD风格的选项:

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

      x :显示所有与终端无关的选项

      u :显示发起进程的用户账户名称的UID

        常用选项组合:axu


      ps aux命令的结果中各字段的含义:

      [root@ZJ01 ~]# ps aux

        USER  PID %CPU %MEM   VSZ  RSS TTY  STAT START  TIME COMMAND

        USER:进程的所有者

        PID:进程的标识符

        %CPU:进程占用的CPU处理时间的百分比

        %MEM :进程占用的物理内存的百分比

        VSZ:虚拟内存集(可交换内存集)

        RSS :常驻内存集

        TTY:进程与哪个终端相关,其中?表示与终端无关

        STAT: 

          R:running 正在运行的进程

          S:interuptible sleeping可中断的睡眠状态

          D:uninteruptible sleeping 不可中断的睡眠状态,Disk Block

          T:Trace/STOPPED,被跟踪/已停止

          Z:Zombie,僵死态

          +:前台进程

          l:进程中可能包含多线程

          <:表示高优先级进程

          N:低优先级进程

          s:session leader,有子进程的父进程

        START:进程开始执行的时候的时间戳   

        TIME:进程累积占用CPU的时间 

        COMMAND:启动进程的命令行的参数

      

    UNIX风格的选项:

        -e:显示所有进程

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

        -F:显示完整格式的进程信息,与-f几乎相同

      常用选项组合之二:-ef

        PPID:父进程PID

        C:表示进程占用CPU时间的百分比


      常用选项组合之三:-sF

        SZ:虚拟内存集

        RSS:常驻内存集

        PSR:表示此进程在哪个CPU核心上运行


      -M:以层级机构显示进程的父子关系


      常用选项组合之四:-eFH


      o|-o:字段1,字段2....以自定义字段方式显示进程相关的信息

        字段:pid,ppid,ni,rtprio,psr,pcpu,stat,comm,user,tty,vsz,rss,...


      常用选项组合之五:-eo | axo 字段1,字段2....


  pgrep,pkill:

    根据进程名称或者其他属性查看进程或者向进程发送信号。

      pgrep [options] pattern

      pkill [options] pattern

    常用选项:

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

      -U uid:显示进程的真实用户

      -t TERM:显示与终端相关的进程

      -l:显示进程名称

      -a:显示进程的完整的命令行参数

  top:

    显示linux进程

技术分享

    top首部:

      第一行:uptime信息:

        当前系统时间  

        系统运行时长

        当前登录系统的用户总数

        过去的1分钟,5分钟,15分钟的在CPU上等待运行的进程队列的平均长度


      第二行:  

        系统中运行的进程总数

        正在运行的进程数

        处于睡眠状态的进程数

        已停止的进程数

        僵死态的进程数


      第三行:CPU时间占用百分比

        us:user space 用户空间的进程占用的CPU时间的百分比

        sy:system 内核空间的内核进程占用的CPU时间的百分比

        ni:nice 使用nice调整了进程的优先级之后额外多占用的CPU时间的百分比

        id:idle CPU空闲时间的百分比

        wa:waiting 等待IO完成所消耗的CPU时间的百分比

        hi:hardware interupting 处理硬件中断事件所消耗的CPU时间的百分比

        si:software interupting 处理软件中断事件所消耗的CPU时间的百分比

        st:stolen 被虚拟化程序偷走的CUP时间的百分比


      第四行:以KB为单位显示物理内存空间的使用情况

        total:物理内存空间的总大小

        free:空闲的物理内存空间大小

        userd:已经被使用的物理内存空间大小

        buffer/cache:缓冲区和缓存区消耗的物理内存空间大小,这段内存空间随时可以回收,不算真正的消耗

        avail men:真正可用的内存空间大小


      第五行:以KB为单位显示与交换分区swap空间的使用情况

        total

        free

        used


      交互式命令:

        1:显示或隐藏CPU核心信息

        P:根据CPU占用百分比进行排序

        M:根据物理内存占用百分比进行排序

        T:根据累计CPU占用时间进行排序

        l:关闭或显示uptime信息

        t:关闭或显示第二,第三行信息

        m:关闭或显示第四,第五行信息

        q:退出top交互模式

        s:修改top的刷新时间间隔

        k:终止某个指定PID的进程的运行


      常用选项:

        -d #:指定top刷新的时间间隔,默认是3秒

        -b:按批次显示进程信息

        -n #:通常与-b选项一起使用,表示显示多少批次


  vmstat

   报告虚拟内存的统计信息


   vmstat [options] [delay [count]]

    delay:按照delay所指示的时间重复执行vmstat命令,默认单位是秒

    count:重复执行vmstat命令的次数

技术分享

  Procs

      r: The number of runnable processes (running or waiting for run time).

      b: The number of processes in uninterruptible sleep.


  Memory

      swpd: the amount of virtual memory used.

      free: the amount of idle memory.

      buff: the amount of memory used as buffers.

      cache: the amount of memory used as cache.

      inact: the amount of inactive memory.  (-a option)

      active: the amount of active memory.  (-a option)


  Swap

      si: Amount of memory swapped in from disk (/s).

      so: Amount of memory swapped to disk (/s).


  IO

      bi: Blocks received from a block device (blocks/s).

      bo: Blocks sent to a block device (blocks/s).


  System

      in: The number of interrupts per second, including the clock.

      cs: The number of context switches per second.


  CPU

      These are percentages of total CPU time.

      us: Time spent running non-kernel code.  (user time, including nice time)

      sy: Time spent running kernel code.  (system time)

      id: Time spent idle.  Prior to Linux 2.5.41, this includes IO-wait time.

      wa: Time spent waiting for IO.  Prior to Linux 2.5.41, included in idle.

      st: Time stolen from a virtual machine.  Prior to Linux 2.6.11, unknown.

  

  选项:

    -s 从/proc/meminfo文件中抽取的信息并加工后输出


  pmap

  显示一个进程的内存映射表

  pmap [options] PID [PID ...]

  选项:

    -x, --extended:展示扩展信息



htop

 交互式的进程查看器

 htop [-dChusv]

 常用选项:

   -d #:htop刷新的间隔时间

   -u USERNAME:显示指定用户的进程

   -s 字段的名称(COLLME_NAME):


 交互式命令:

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

   t F5 :显示进程树结构,以显示进程之间的父子关系

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



glances

 一个跨平台的基于curses-based(内核库)的监控工具

 常用选项:

   -b:以kByte为单位显示网卡的数据速率

   -d:关闭磁盘IO的模块

   -m:关闭Mount(挂载信息)的模块

   -n:关闭Network模块

   -1:单独显示每颗CPU核心的数据统计信息

   -t #:设定刷新时间间隔

   -o {HTML|CSV}:为输出数据指定输出的格式

   -f /PATH/TO/OUTPUT_DIR(目录名):指定输出文件的路径信息


   glancses可以工作于C/S模型下:

     S:服务器模式

       glances -s -B IPADDR

         IPADDR:服务器本地的某个IP地址

     C:客户机模式

       glances -c IPADDR

         IPADDR:远程服务器指定监听的IP地址

进程之间可以通信的;IPC,Inter-Process Communication

1.signal

2.semaphore

3.shared memory (SHM)

4.socket



dstat

 常用选项:

   -c,--cpu:显示CPU相关的统计信息

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

   -g,--page:显示page相关的信息

   -n,--net:显示与Interface相关的信息

   -y,--sys:显示与系统相关的信息

   --tcp:显示与TCP连接状态相关的信息

   --udp:显示与UDP连接相关的信息

   --ipc

   --raw

   --socket

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

   --top-io:显示最占用IO的进程


进程管理类:

  kill:

    终止一个进程

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


    查看信号的信息:

      kill -l [signal]


    有效的信号表示方法:

      1.使用信号的数字编码进行表示

      2.使用信号的完整名称进行表示

      3.使用信号的简写名称进行表示,简写名称就是完整名称中不包含SIG的其余部分


    常用的信号:

      1)SIGHUP:无需关闭对应进程而让其重新读取其自身的配置文件

      2)SIGIT:终止正在运行的前台进程

      9)SIGKILL:没有任何预兆的终止正在运行的进程

      15)SIGTERM:默认信号,终止正在运行的进程

      18)SIGCONT:让转入后台的进程继续运行

      19)SIGSTOP:让进程转入后台并停止运行


  killall:

    根据名字终止所有进程

    # killall PROCESS_NAME


  pkill:

    根据模式(pattern)进行进程终止,可能会误伤其他进程



  进程作业管理类命令

 

  进程作业:

    前台作业:

      foreground job,通过终端启动,并且启动后会一直占据终端的进程

    后台作业:

      background job,可以通过终端启动但启动后立即转入后台进行,会释放终端


    如何让作业工作在后台:

    1.正在运行的前台作业:

      Ctrl+z

      注意:实际上是向此进程发送SIGSTOP信号,使得该进程转入后台后即停止运行

    2.对于尚未启动的作业使其启动并转入后台:

      # COMMAND & 

      注意:此类作业从前台启动,启动后立即转入后台,但即便如此,此进程也是与终端相关的进程,如果终端关闭则此类进程也会终止

    3.对于尚未启动的作业使其启动并转入后台同时剥离其与终端的关联:

      # nohup COMMAND &


  查看后台作业的信息:jobs


  将后台作业转入前台工作的命令:fg [JOB_ID(作业编号)]


  将后台作业在后台运行:bg [JOB_ID]


  终止后台作业:kill %JOB_ID


5.Linux系统的进程调度(任务调度)


进程调度:在未来某个时间点,让系统自动执行我们事先编写好的命令或脚本的列表,从而使得即使用户不在计算机旁边也可以按时完成任务;为了能够进行进程调度,就必须要有一种机制能够识别事件发生的时间并且能够运行用户所预期的命令;这种机制在Linux中是通过特定的守护进程来实现的;

这类守护进程包括:

atd:

将预先编写好的命令在未来某个时间点执行一次;

crond:

将预先编写好的命令在未来的符合条件的时间点重复执行;


at命令:

at, batch, atq, atrm - queue, examine or delete jobs for later execution


at [option] TIME

TIME:

1.HH:MM [YYYY-mm-dd]

2.noon, midnight, teatime

3.tomorrow

4.now+#UNIT  UNIT:min, hours, days, weeks, months, years...

 例如:at now+2days     at now+5min


at定义的作业有队列的概念,通常队列使用单个字母来表示,默认是a;

at -q QUEUE_NAME TIME


选项:

-q QUEUE

-f FILE

-l:查看队列,相当于atq

-d JOB_ID:清除指定的计划作业,相当于atrm

-c:查看指定的作业的内容


batch命令:

batch命令在定义任务的时候,无需指定时间,是由系统自行选择在系统比较空闲的时候,完成此计划任务;其他的配置与at完全相同;


周期性执行任务计划:cron

cronie软件包,提供crond守护进程以及cron的其他管理工具;


cron任务通常分为两类:

系统cron任务:/etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/


# For details see man 4 crontabs


# Example of job definition:

# .---------------- minute (0 - 59)

# |  .------------- hour (0 - 23)

# |  |  .---------- day of month (1 - 31)

# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...

# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# |  |  |  |  |

# *  *  *  *  * user-name command to be executed


注意:

1.

*  *  *  *  *:定义周期执行任务的时间

user-name:运行此任务的用户账户身份;

command to be executed:应该执行的任务命令及命令行参数;

注意:为了保证任务能够准确执行,命令通常是用绝对路径填写;


2.各个字段之间使用一个或多个空白字符进行分隔;


3.任务运行的结果以邮件的方式直接发送给root用户;


用户cron任务:/var/spool/cron/USERNAME

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/


# For details see man 4 crontabs


# Example of job definition:

# .---------------- minute (0 - 59)

# |  .------------- hour (0 - 23)

# |  |  .---------- day of month (1 - 31)

# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...

# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# |  |  |  |  |

# *  *  *  *  *  command to be executed


注意:

1.

*  *  *  *  *:定义周期执行任务的时间

command to be executed:应该执行的任务命令及命令行参数;

注意:为了保证任务能够准确执行,命令通常是用绝对路径填写;


2.各个字段之间使用一个或多个空白字符进行分隔;


3.任务运行的结果以邮件的方式直接发送给发布任务的用户;


时间表示法:

1.特定时间:给定时间点的有效取值范围内的所有有效值;

0 5 3 9 *

2.通配符时间:*,表示"每..."之意,给定时间点的所有有效值;

* * * * *

3.离散时间:在给定的时间点上,使用逗号分隔;

0 8,20 * * 1,3,5

4.连续时间:在给定的时间点上,使用减号分隔;

0 8 * * 1-5

5.步长时间:在给定的时间点上,使用除号分隔;

*/2 * * * *

*/7 * * * * 此种方式无法实现每7分钟为间隔执行计划任务;


注意:

1.指定的步长必须能被时间点的数值整除,否则,无意义;

2.最小的时间单位是分钟,如果计划以秒为执行计划任务的时间单位,必须借助于其他机制;


crontab命令:

crontab - maintain crontab files for individual users

crontab [-u user] [-l | -r | -e] [-i]


-u USERNAME:超级用户为其他用户设置或编辑用户cron任务时使用;

-l:查看所有的已经被定义的计划任务

-e:使用vi编辑器编辑crontab文件;

-r:移除所有的计划任务;不推荐使用;

-i:在使用-r选项时,进行交互;


本文出自 “12657170” 博客,请务必保留此出处http://12667170.blog.51cto.com/12657170/1950315

Linux--进程管理