Linux 进程及作业管理

一 进程、线程、程序概念

1、进程(Process)

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

2、线程(Thread)

一个进程至少包括一个线程,通常将该线程称为主线程,所以线程是比进程更小的单位,是系统分配处理器时间资源的基本单元。一个进程要想同时在多颗CPU上运行,必须得分成互不影响的多个执行流,而后每组单独在各自所分配的CPU上运行,这种分化后的执行流且有着比进程更小资源分配单位称之为线程。线程之间可以共享内存空间,当一个文件需要被打开多次时,线程模型可以节省很大的内存空间,但是得避免因资源征用造成死锁问题。并且线程在运行过程当中,如果某一个线程崩溃或是出现意外情况,会影响同个进程内其它线程,比单进程模型稳定性差。

3、程序(Program)

程序由指令和数据组成。

程序是为了达到特定的目的,可以被计算机运行并且由命令代码组成的语句序列。

程序只是一个普通文件,是一个机器代码指令和数据的集合,这些指令和数据存储在磁盘上的一个可执行映象(Executable Image)中,所以,程序是一个静态的实体。

二 进程相关知识

1.虚拟地址空间

在内存中,每个程序的运行都是孤立的,每个程序只知道当前内存空间只运行了自己和内核,而看不到其它的进程。

2.内核模式与用户模式

以32bit系统为例,Linux的虚拟地址空间为0~4G。Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为“内核空间”。而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF),供各个进程使用,称为“用户空间)。Linux使用两级保护机制:0级供内核使用,3级供用户程序使用。

3.进程的状态:

        运行态:runnnig

        睡眠态:sleeping

        可中断睡眠:interruptable,随时来请求,随时能唤醒,比如处理完当前请求后暂时还没有更多请求下,这种sleep就是可                                    中断 

        不可中断睡眠:uninterruptable,等待外部条件满足之前无法继续运行。       

        停止态:stopped,不会再被内核调度并运行。

        僵死态:zombie,父进程先于子进程结束了,子进程再也不能被停掉的进程。

4.进程的优先级

        CPU挑选进程是根据进程的优先级进行的,进程优先级的取值范围为0-139。

        实时优先级:0-99,数字越大,优先级越高;(内核控制)

        静态优先级:100-139,数字越小,优先级越高。(用户可控制的优先级)

        用户可以通过调整nice值来改变进程的优先级。

        nice值:-20-19 调整静态优先级

        进程启动时,默认nice值为0,优先级对应为120。

        动态优先级:由内核维护,动态调整。

        Linux使用抢占式多任务:当时钟信号到达时,高优先级进程可以抢占CPU。

5.进程间通信方式(IPC: Inter Process Communication)

同一主机:

            singnal:信号。

            shm:共享内存。

            semerphor:旗语。

不同主机:

            rpc:remote procedure calling,远程过程调用。

            socket:IP:port,套接字。

6.进程的分类:

       CPU-Bound(CPU密集型):对于CPU占用率高的进程。

       I/O-Bound(I/O密集型):等待I/O时间长的进程

7.子进程

        进程运行是单线运行的,进程中的指令必须顺序执行。             

        子进程:父进程有无法完成的任务时,启用子进程来执行,此时父进程进入睡眠,子进程执行完成后,返回父进程继续执行。

        进程创建机制:每一个进程都是由其父进程fork()自身而来。

8.线程

        线程是比进程更小的可以被单独调度的单位。

        线程将进程的任务指令拆分,分配到不同的CPU上同时运行。

        不过Linux中的进程都是轻量级进程,已经相当于线程的级别了。

三 进程管理相关命令

1.pstree    # 显示进程树

  pstree -p

blob.png

2.ps:process state,查看当前进程状态

  备注:实际上是查看/proc/ *目录下内核中的状态信息

    SYNOPSIS

           ps [options]

            

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

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

        u:显示运行进程的用户

        -e:显示所有进程

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

        o  field1, field2,…:自定义要显示的字段列表,以逗号分隔

常用组合:aux、ef、axo

 ps -aux

blob.png

   USER:运行该进程的用户

   PID:进程的ID号码

   %CPU:CPU的占用百分比

   %MEM:内存空间占用比率,占用整个内存空间的比例

   VSZ:虚拟内存集;占用的虚拟内存大小,真正用来占用的内存

        每个内存占用的内存有两种:线性内存空间、物理内存空间

        线性内存:会映射到物理内存,在线性内存空间角度看是连续的内存占用

        物理内存:实际上是以内存页框保存,可能一个进程占用的不连续的页框

   RSS:ResidentSize,常驻内存集,当前进程常驻内存的大小,即不能被交换出去的空间大小

   TTY:运行终端

   STAT:当前进程的运行状态,BSD样式

    R:running,运行态

    S:interruptable sleeping,可中断睡眠

    D:uninterruptable sleeping,不可中断睡眠

    T:Stopped,停止状态

    Z:zombie,僵死状态,进程结束后,在被回收之前状态

    +:表示一个前台进程,占据命令提示符

    l:多线程进程

    N:低优先级进程

    <:高优先级进程

    s:session leader ,回话主导进程,如shell,其主导其下的进程

   START:进程开始时间

   TIME:累计运行CPU时间

   COMMAND:使用进程、线程

ps -ef

blob.png

   UID:启动进程用户

   PID:运行进程号

   PPID:父进程的进程号,0在内核启动init之前存在,init启动后终止,存在过渡,一般为swap的进程

   C:cpu utilization,CPU的占用百分比

   STIME:启动时间

   TTY:与其终端相关

   TIME:累计运行CPU时间

   CMD:启动此进程的命令

ps axo  显示自定义字段列表

 o field1, field2,…:自定义要显示的字段列表,以逗号分隔,o要写在后面,因为要带参数

    常用的field:pid,ni, pri, psr, pcpu, stat, comm, tty, ppid, rtprio

    ni:nice值;

    priority:priority,优先级;

    rtprio:realtime priority,实时优先级;

3.pgrep,pkill:基于进程名字或者其他属性对相关进程发起查询、发送信号

  SYNOPSIS

         pgrep [options]  [pattern]

        

        -o:仅显示找到的最小(起始)进程号

        -n:仅显示找到的最大(结束)进程号

        -l:显示进程名称

        -P:指定父进程号

        -g:指定进程组

        -t:指定开启进程的终端

        -u:指定进程的有效用户ID

   blob.png

4.pidof:根据进程名获取取其pid;

    SYNOPSIS

           pidof [-s] [-c] [-x] [-o omitpid] [-o omitpid..]  program [program..]

            

        -s:仅显示一个

blob.png

5.top:- display Linuxprocesses,动态显示进程信息

   SYNOPSIS

        top  [OPTION]

   (1)选项:

       -d #:指定刷新时间间隔,默认为3秒;

         -b:以批次方式显示;

       -n #:显示多少批次;

   (2)在top显示过程中通过交互式命令指定排序(默认CPU):

           P:以占据CPU百分比排序;

           M:以占据内存百分比排序;

           T:累积占用CPU时间排序;

   (3)首部信息关闭

          uptime信息:l命令

          tasks及cpu信息:t命令

          内存信息:m命令

   (4)退出命令:q

   (5)修改刷新时间间隔:s

   (6)终止指定的进程:k

 top

blob.png

blob.png

  这一行的内容表示:

                23:11:04:当前系统时间;

                up  1:00:服务器连续运行的时长为1小时;

                2 users:当前登录系统的用户数;

                load average:过去1分钟、5分钟、15分钟的平均负载

1:数字,分别显示各CPU的相关信息;

blob.png

使用数字1可以查看不同的CPU的信息,下面说明各字段具体的含义:                     

                us:user space,用户运行程序时间百分比;

                sy:system,用于运行内核所占用CPU的百分比;

                ni:nice,用户进程空间内改变过优先级的进程占用CPU百分比;

                id:idle,空闲CPU百分比;

                wa:wait io,等待IO花费的时间;

                hi:hardware interrupt,硬中断占用CPU的百分比;

                si:software interrupt,软中断占用CPU的百分比;

                st:stolen,偷走的时间百分比。

blob.png

各字段含义如下:

                Mem:物理内存;

                Swap:交换分区; 

                buffers:缓冲区,用于减少进程之间的等待时间;

                cache:CPU与内存之间的高速缓存,用于减少CPU的等时间。 

 top -p 1727

blob.png

6.uptime命令:显示系统时间、运行时长及平均负载  

去1分钟、5分钟和15分钟的平均负载;等待运行的进程队列的长度;

blob.png

7.htop命令

这个工具默认没有安装 需要第三方源才可以安装

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

yum install htop

(1)选项:

    -d#:指定延迟时间间隔;

    -uUserName:仅显示指定用户的进程;

    -sCOLUME:以指定字段进行排序;

(2)子命令:

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

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

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

    a:将选定的进程绑定至某指定的CPU核心;

(3) 显示叙述

blob.png

左上方数据:表示每颗CPU、内存、交换内存的使用率

右上方数据:

    Tasks当前的任务数量,用户空间进程

    thr:线程数量

    running:运行的数量

    Load average :过去一分钟、五分钟、十五分钟的平均负载

8.vmstat命令    # 显示虚拟内存统计信息

 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:interrupts,中断速率;

    cs:contextswitch, 上下文 切换的速率;

cpu

    us:user space

    sy:system

    id:idle

    wa:wait

    st:stolen

9.dstat命令    #系统资源统计工具

    SYNOPSIS

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

 常用选项:

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

        -C #,#,…,total  显示第几颗CPU,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:延迟最大的进程;

 dstat

blob.png

10.kill命令:      

kill  [-s signal|-SIGNAL]  pid…     向进程发信号

kill -l [signal]:显示当前系统可用信号:

 blob.png    

常用信号:

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

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

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

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

18) SIGCONT:继续

19) SIGSTOP:停止,将进程送后台,停止状态

指定信号的方法:

(1) 信号的数字标识;1, 2, 9

(2) 信号完整名称;SIGHUP

(3) 信号的简写名称;HUP

11.killall

 killall [-SIGNAL]  program  对所有与program相关的进程发信号

四 系统作业控制命令

1.系统作业job

      (1)job种类:

                前台作业(foregroud):通过终端启动,且启动后会一直占据终端;

                后台作业(backgroud):可以通过终端启动,但启动后即转入后台运行(释放终端);

      (2)让作业运行于后台

                1) 运行中的作业:Ctrl+z

                   送往后台后,作业会转为停止态;相当于发送kill -19 信号

                2) 尚未启动的作业:  # COMMAND &

                   此类作业虽然被送往后台,但其依然与终端相关;如果希望把送往后台的作业剥离与终端的关系:

                   # nohup COMMAND &

      (3)查看所有的作业:#jobs命令

         +/- 表示优先级;当调用时不加作业号会默认调用+的命令

       (4)可实现作业控制的常用命令:

          #fg  [[%]JOB_NUM]:把指定的作业调回前台;

          #bg  [[%]JOB_NUM]:让送往后台的作业在后台继续运行;

          #kill  %JOB_NUM:终止指定的作业;

blob.png

2.调整进程优先级: 

可通过nice值调整的优先级范围:100-139;分别对应于:-20, 19。进程启动时,其nice值默认为0,其优先级是120;

    注意:仅管理员可调低nice值;

(1)nice命令:

    以指定的nice值启动并运行命令:# nice  [OPTION] [COMMAND [ARGU]…]

     选项:-nNICE

            nice -n -5 echo "hello world"

(2)renice命令:

    #renice  [-n]  NICE PID…

    renice -10 1589

(3)查看Nice值和优先级:ps  axo pid, ni, priority, comm 

    ps axo pid,ni,command | grep "bash"

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

(0)
liangkailiangkai
上一篇 2016-03-14
下一篇 2016-03-18

相关推荐

  • cp复制软链接失效的原因

    在学习cp命令时我们会知道复制软链接时,如果要保留链接文件使用-d,但当我们实际操作时却常常出现如下情况 [root@localhost ~]# ls -l /etc/redhat-release     #此文件为链接文件 lrwxrwxrwx. …

    Linux干货 2016-10-25
  • 文本处理学习小结

    抽取文本的工具 文件内容:less和cat 文件截取:head和tail 按列抽取:cut 按关键字抽取:grep 文件查看 复制标准输入到标准输出 文件查看命令:cat, tac,rev cat命令: cat [OPTION]… [FILE]… -E: 显示行结束符$ -n: 对显示出的每一行进行编号 -A:显示所有控制符 -b:非…

    Linux干货 2016-08-07
  • Linux基础 sed命令详解

    概述 sed是一个流编辑器(Stream EDitor)。主要用于自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。本文主要讲述了: sed工作原理 sed命令格式及常用选项 应用实例 高级编辑命令 sed工作原理 sed命令运行过程中维护着两个缓冲区,一个是活动的“模式空间(pattern space)”,另一个是起辅助作用的“暂存缓冲区(ho…

    Linux干货 2016-08-12
  • N28-第三周

    1. 列出當前系統上所有已經登入的用戶的用戶名,注意:同一個用戶登入多次,則只顯示一次即可。
    2. 取出最後登入到當前系統的用戶的相關信息。
    3. 取出當前系統上被用戶當做其默認shell的最多的那個shell。
    4. 將/etc/passwd中的第三個字段數值最大的後10個用戶的信息全部改為大寫後保存至/tmp/maxusers.txt文件中。
    5. 取出當前主機的IP地址,提示:對ifconfig命令的結果進行切分。
    6. 列出/etc目錄下所有以.conf結尾的文件的文件名,並將其名字轉換為大寫後保存至/tmp/etc.conf文件中。
    7. 顯示/var目錄下一級子目錄或文件的總各數。
    8. 取出/etc/group文件中第三個字段數值最小的10個組的名字。
    9. 將/etc/fstab和/etc/issue文件的內容合併為同一個內容後保存至/tmp/etc.test文件中。
    10. 請總結描述用戶和組管理類命令的使用方法並完成以下練習:
    (1) 創建組distro,其GID為2016。
    (2) 創建用戶mandriva,其ID號為1005,基本組為distro。
    (3) 創建用戶mageia,其ID號為1100,家目錄為/home/linux。
    (4) 給用戶mageia添加密碼,密碼為mageedu。
    (5) 刪除mandriva,但保留其家目錄。
    (6) 創建用戶slackware,其ID號為2002,基本組為distro,附加組peguin。
    (7) 修改slackware的默認shell為/bin/tcsh。
    (8) 為用戶slackware新增附加組admins。

    2017-12-19
  • 行编辑器sed

    行编辑器sed   Sed,grep,awk命令被称为文本编辑三剑客,目前学习了grep命令,sed命令 自我觉得sed命令更强大,排名第一,grep暂居第二,awk没学不太清楚。   这次的博客写一下刚学习的sed命令,grep命令是全局搜索剪切,sed命令则是逐行进行处理,它一次处理一行内容。Sed命令有两个空间,…

    2017-08-26
  • M20 – 1- 第三周博客(3):Linux中文本处理工具

    1、文件查看查看工具 Linuxzhong存在着很多配置文件以及脚本,那Linux中也自带了查看文本的工具: cat 命令 简介: cat – concatenate files and print on the standard output 格式: cat&nbsp…

    Linux干货 2016-08-07