Linux进程及作业管理

process

运行中的程序的一个副本,是被载入内存的一个指令集合
进程ID(Process ID,PID)号码被用来标记各个进程
UID、GID、和SELinux语境决定对文件系统的存取和访问权限,
通常从执行进程的用户来继承
存在生命周期

task struct:Linux内核存储进程信息的数据结构格式
task list:多个任务的的task struct组成的链表

进程和线程的区别

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
1) 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
2) 线程的划分尺度小于进程,使得多线程程序的并发性高。
3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
4) 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
5) 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

进程创建

init:第一个进程
    父子关系
    进程都由其父进程创建
        fork(), clone()

进程优先级

系统优先级:数字越小,优先级越高
    0-139:
        1-99:实时优先级
        100-139:静态优先级
            数字越小,优先级越高
    nice值:-20到19,对应系统优先级100-139或99
Big O:时间复杂度,用时和规模的关系
    O(1), O(logn), O(n), O(n^2), O(2^n)

进程内存

Page Frame:页框,用存储页面数据,存储Page 4k
LRU:Least Recently Used 近期最少使用算法,释放内存物理地址空间和线性地址空间
MMU:Memory Management Unit负责转换线性和物理地址

进程之间的通信

我们知道在计算机网络体系当中,主机与主机之间通信,实质上是主机进程与主机进程之间的通信,也就是进程间的通信(IPC.Inter Process Communication).
    当两个进程在同一台主机上时:进程间通信科依靠signal(信号指令)、shm(shared memory共享内存空间)、semerphor(旗语,类似飞机起飞时的旗帜语言)来完成。
    当两个进程不在同一台主机上时:进程间通信可以依靠rpm(remote procedure call远程过程调用)、socket(套接字)

进程类型

根据进程与系统终端的关系可将进程分为:守护进程和前台进程
    守护进程:在系统引导过程中启动的进程,即跟终端无关的进程
    前台进程:跟终端相关,通过终端启动的进程,需要注意的是,也可以把前台启动的进程送往后台,以守护模式运行
根据进程占用资源的大小可以将进程分为:CPU密集型和IO密集型
    CPU密集型是对cpu占用率高的进程
    IO密集型是等待I/O时间长的进程

进程状态

1.Running(运行态):正在运行当中的进程
2.ready:就绪态
3.睡眠态:sleeping
    可中断睡眠:interruptable
    不可终端睡眠:uninterruptable
4.停止态(Stopped):暂停于内存中,但不会被调度,除非手动启动
5.僵死态(Zombie):孤魂野鬼,找不到归宿,父进程不来收尸或父进程已经挂了

管理进程常用命令

pstree命令

H}K9)Q$YKQHFE%@5Q4@@FXI.png

pstree - display a tree of process

ps命令

V{UD79O`(WQVB~%5@U3{$7R.png

report a snapshot of the current processes.
    三种选项风格:
        UNIX:必须带-
        BSD:必须无-
        GNU:长选项
    启动进程的方式:
        系统启动过程中自动启动:与终端无关的进程
        用户通过终端启动:与终端相关的进程
    选项:
        a:所有与终端相关的进程
        x:所有与终端无关的进程
        u:以用户为中心组织进程状态信息显示

        常用组合之一:aux
        每个字段的含义:
            USE:进程的发起者
            PID:进程ID
            %CPU:进程所占用的CPU百分比
            %MEM:进程所占用的内存百分比
            VSZ:进程所占用的虚拟内存空间大小
            RSS:进程所占用的实际内存空间大小
            TTY:此进程运行在哪个终端,pts/n表示远程终端,tty表示本地终端,?表示系统进程
            STAT:进程的状态
                R:Running态
                S:Interruptable,可中断睡眠
                D:Uninterruptable,不可终端睡眠
                T:Stopped,停止态
                Z:Zombie,僵死态
                s:Session leader,会话领导者
                +:前台进程
                l:多线程进程
                <:高优先级进程
                N:低优先级进程
            START:进程的启动时间
            TIME:进程实际占用的CPU时间
            COMMAND:触发此进程的命令程序

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

        常用组合之二:-ef
        每个字段的含义:
            UID:进程的发起者
            PID:进程ID
            PPID:父进程的PID
            C:占用CPU的百分比
            STIME:进程的启动时间,从什么时候开始启动的
            TTY:进程在哪个终端运行
            TIME:进程实际花费的CPU时间
            CMD:触发此进程的命令

        -F:显示完整格式的进程信息
            C:cpu utilization
            PSR:运行于哪颗CPU
        -H:以层级结构显示进程的相关信息

        常用组合之三:-eFH

        常用组合之四:exo
            自定义要显示的字段
                常用的有pid,ni,ppid,command,pri,psr,pcpu,stat,tty,rtprio,euser,ruser...
                    ni:nice值
                    pri:priority,优先级
                    rtprio:real time priority,实时优先级

pgrep命令

Q}1@[LD][SP[X0KD)(9ZROT.png

look up or signal processes based on name and other attributes
pgrep [OPTIONS] pattern
    -U USER:只显示以指定用户身份运行的进程
    -t TERMINAL:与指定的终端相关的进程
    -l:显示进程名
    -a:显示完整格式的进程名
    -P pid:显示此进程的子进程

pkill命令

2TKUIC~6GR005(2KTF]92@S.png

可以按照进程名称杀死进程
    -o:仅向找到的最小(起始)进程号发送信号; 
    -n:仅向找到的最大(结束)进程号发送信号; 
    -P:指定父进程号发送信号; -g:指定进程组; 
    -t:指定开启进程的终端。

pidof命令

)]4VVU]@%YU}Q[~NX`YX7%M.png

根据指定的命令所启动的进程ID
    pidof PROGRAM

top命令

`F$@}XS34`}%$F2VN(UPU)S.png

display Linux processes
常用选项:
    -d #:指明延迟时长,单位为秒
    -b:批次显示
    -n #:显示的批次数量
每一行代表的含义为:
第一行:
    1.当前的系统时间
    2.系统启动到现在所经过的时间
    3.当前已经登录到系统的用户
    4.系统在1,5,15分钟的平均负载,值越小表示系统越空闲
第二行:
    显示的目前进程的总量与个别程序在什么状态(running,sleeping,stopped,zombie)比较需要注意的是最后的zombie的那个数值,如果不是0就需要查看下是哪个进程处于僵尸状态
第三行:
    显示的是CPU的整体负载,如果是多核心的cpu,可以按下数字1来切换不同CPU的负载率
        us:user space用户空间所占用的CPU百分比
        sy:kernel,内核空间所占用的CPU百分比
        ni:改变过优先级的进程所占用的CPU百分比
        id:空闲CPU百分比
        wa:wait io,等待I/O所花费的时间
        hi:硬件中断所消耗的百分比
        si:软件终端所消耗的百分比
        st:被虚拟机偷走的百分比
第四行:表示物理内存空间的使用情况
第五行:表示交换分区的使用情况

子命令:
    P:以占据CPU百分比排序显示
    M:以占据内存百分比排序显示
    T:累计占用CPU时间排序显示
    l:是否显示负载均衡行
    t:是否显示进程摘要信息及CPU负载状态
    1:数字1,平均或单独显示CPU的负载状态
    m:是否显示内存相关的状态信息
    q:退出命令
    k:终止指定进程
    s:修改延迟时长

top下面的部分:
    PID:每个进程ID
    USER:进程所属的使用者
    PR:priority简写,进程的优先级,越小优先级越高
    NI:nice的简写,与Priority有关,也是越小越早被运行
    VIRT:进程需要的虚拟内存大小,而非使用的虚拟内存大小
    RES:进程当前使用的内存大小,不把包括swap
    SHR:进程与其他进程共享的内存大小
    S:进程的状态
    %CPU:进程所占用的CPU百分比
    %MEM:进程所占用的内存百分比
    TIME+:CPU使用时间的累加
    COMMAND:触发此进程的命令

uptime命令

0LHKQI%04R7`6MJ16MC$5~D.png

显示系统时间、运行时长及平均负载
过去1分钟、5分钟和15分钟的平均负载
等待运行的进程队列的长度

htop命令

{MV%]BE4P1RN_0@$}L6G1)I.png

top升级版,默认情况下没有安装,需要配置EPEL源来进行安装
支持的选项:
    -d #:延迟时长
    -u USERNAME:仅显示指定用户的进程
    -s COLUMN:根据指定的字段进程排序
子命令:
    l:显示光标所在进程所打开的文件列表
    s:显示贯标所在进程执行的系统调用
    a:绑定进程到指定的CPU
    #:快速定位光标至PID为#的进程上

vmstat命令

LORR81FNTHRB)_EX]{H0JJF.png

Report virtual memory statistics
vmstat [options] [delay [count]]
    procs:进程相关
        r:等待运行的进程个数;队列长度
        b:处理不可中断睡眠状态的进程的个数
    memory:内存相关
        swpd:交换内存使用量
        free:物理内存空间使用量
        buffer:用于buffer的内存总量
        cache:用于cache的内存总量
    swap:交换分区相关
        si:数据进入swap的速率(kb/s)
        so:数据离开swap的速率(kb/s)
    io:I/O相关
        bi:从设备读入数据到系统的速率(kb/s)
        bo:保存数据至块设备的速率(kb/s)
    system:
        in:中断速率,每秒被中断的次数
        cs:进程切换的速率
    cpu:
        us:user space用户运行程序占用CPU的百分比
        sy:system用于运行内核占用CPU的百分比
        id:idle空闲CPU百分比
        wa:wait I/O花费时间
        st:被虚拟机偷走的百分比
常用选项:
    -s:显示内存的统计数据

pmap

`)[TH(LMW(F{KQ{6S5V0S6F.png

进程对应的内存映射
    pmap [OPTIONS] pid [...]
        -x:显示详细格式
        示例:pmap 1
    另一种实现方式:
        cat /proc/PID/maps

系统监控工具

glances

@SGI5{A[LX@ES{WE@QDBKPD.png

A cross-platform curses-based monitoring tool 需要EPEL源
常用选项:
    -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命令

YPP1J$$5S@FMQ@N9(CNM]%2.png

versatile tool for generating system resource statistics
dstat [-afv] [options..] [delay [count]]
常用选项:
    -c, --cpu:显示cpu相关信息
        -C#,#,...,total
    -d, --disk:显示磁盘的相关信息
        -D sda,sdb,...,total
    -g:显示page相关的速率数据
    -m:Memory的相关统计数据
    -n:Interface的相关统计数据
    -p:显示process的相关统计数据
    -r:显示io请求的相关的统计数据
    -s:显示swapped的相关统计数据

    --tcp:显示tcp套接字的相关数据
    --udp:显示udp套接字的相关数据
    --raw:显示raw套接字的相关数据
    --socket:
    --ipc:显示进程间通信相关的速率数据

    --top-cpu:显示最占用CPU的进程
    --top-io:最占用io的进程
    --top-mem:最占用内存的进程
    --top-lantency:延迟最大的进程

管理进程

kill命令

terminate a process
用于向进程发送信号,以实现对进程的管理

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

    每个信号的表示方法有三种:
        1)信号的数字标识
        2)信号完整名称
        3)信号的简写名称

向进程发信号:
    kill [-s signal|-p] [-q sigval] [-a] [--] pid...
    常用信号:
        1)SIGHUP:无需关闭进程让其重读配置文件
        2)SIGINT:终止正在运行的进程,相当于Ctrl+c
        9)SIGKILL:强行杀死所指定的进程
        15)SIGTERM:终止一个进程,默认kill命令不跟选项则使用此选项
        18)SIGOUT:继续运行进程
        19)SIGSTOP:暂停进程,把进程放置于后台,相当于Ctrl+z

killall

终止一个进程
killall [-SIGNAL] program

作业管理

jobs命令

{S`$I7S)RAYDDAX$UUFX{3L.png

查看当前系统作业
    -l:显示进程ID
前台作业(foregroud):通过终端启动,且启动后会一直占据终端
后台作业(backgroud):可以通过终端启动,但启动后即转入后台运行(释放终端)

如何让作业运行于后台?
    (1)运行中的作业
        Ctrl+z
        注意:送往后台后,作业会转为停止态
    (2)尚未启动的作业
        # COMMAND &
        注意:此类作业虽然被送往后台,但其依然与终端相关;如果终端终止,与终端相关的进程将被终止;
            如果希望把送往后台的作业剥离与终端的关系
                # nohup COMMAND &

可实现作业控制的常用命令:
    fg [[%]JOB_NUM]:把后台作业调回前台
    bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行
    kill %JOB_NUM:终止指定的作业

调整进程优先级

可通过nice值调整的优先级范围:100-139
    分别对应于:-20, 19

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

nice命令:
    以指定的nice值启动并运行命令
        nice [OPTION] [COMMAND [ARGU]...]
            选项:
                -n NICE

        注意:只有管理员才可调低nice值

renice命令:
    renice [-n] NICE PID...

查看Nice值和优先级:
    ps axo pid,ni,priority,command | grep COMMAND

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

(0)
上一篇 2016-09-10 21:49
下一篇 2016-09-11 09:29

相关推荐

  • 编译安装Apache

    实验环境:CentOS 6 安装包版本:httpd-2.2.29.tar.bz2 一、安装前准备     (1)、获取httpd-2.2.29.tar.bz2安装包     (2)、准备开发工具,安装相应的包组 yum groupinstall -y&nbsp…

    Linux干货 2016-08-24
  • Linux下的find命令详解

    Linux下的find命令详解 在linux下有两种查找符合条件文件的命令,是locate和find。我们来说说find这个命令。 find: 实时查找工具,遍历查找指定路径下的所有的文件来找到符合条件的文件。 特点:查找文件比locate速度略慢,查找文件很精确,并且是实时进行查找的。 使用方法:find [OPTIONS] [查找起始路径] [查找条件]…

    Linux干货 2018-03-20
  • 一点点RPM

    1、软件管理器简介          随着Linux的不断发展及越来越多的人投入到Linux大家庭中,软件管理器的作用对于还无法熟练掌握源码编译安装的人们还是显得尤为重要,同时,由Linux开发商在为其编译完成的软件包在某种程度上要比在网络上流传的软件包要安全的多;所以,掌握Li…

    Linux干货 2015-12-06
  • Linux下的进程调度与作业管理

    Linux下的进程调度与作业管理 一、概述 1.1 进程的相关概念: 通过前面的几个章节,我们几乎已经学习了很多的linux的基础,这个章节我们讲一下linux下的进程管理,就像windows 下的进程一样,我们知道windows 下有一个任务管理器,专门用来管理进程,我们首先看一下windows 的任务管理器: 从这2个图我们可以看出,windows 下的…

    Linux干货 2016-10-17
  • Linux 用户、用户组及权限管理

    一、Linux用户及用户组的基本概念 用户:用户是实现能够将有限的资源在多个使用者之间进行分配;、 用户组:用户组是指多个用户的集合,方便对一类需要同样权限的用户授权 Linux是多用户、多任务的操作系统。     多用户指:多人同时使用系统资源;多任务:同时运行多个进程 二、用户及用户组类别 1、用户:名称解析库 /…

    Linux干货 2016-03-20
  • 基于nginx实现7层http的负载均衡

    一、实验环境实验环境为三台服务器:1. nginx负载均衡器1. 内网ip:192.168.11.1002. 外网ip:172.16.251.892. 提供网页服务的RS-1服务器:192.168.11.2013. 提供网页服务的RS-2服务器:192.168.11.2024. 拓扑如下:二、实验配置后台服务器配置:1. 后台提供网页服务的两台服务器配置:y…

    Linux干货 2017-06-29