Linux进程管理

内核的功能:

    进程管理 文件系统 网络功能 内存管理 驱动程序 安全功能等

    rocess:运行中的程序的一个副本,是被载入内存的一个指令集合

     进程ID(Process ID,PID)号码被用来标记各个进程 UID,GID,和SElinux语境决定对文件系统的存取和访问权限,通常从执行进程的用户来继承,存在生命周期。

    task struct:Linux内核存储进程信息的数据结构格式

task  list:多个任务的task Struct组成的链表

        进程创建:

             init:第一个进程

父子进程

        进程:

            都由其父进程创建,COW

             fork(),clone()

        进程优先级:

            系统优先级:数字越小,优先级越高

            0-139(centos4,5)

            各有140个运行队列和过期队列

            0-98,99(centos6)

            实时优先级:99-0:值最大优先级最高

            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

            semophore:信号量,一种计数器

        不同主机上:

            rpc:remote procedure call

socket:IP号和端口号

    

        Linux内核:抢占式多任务

        进程类型:

            守护进程:daemon,在系统引导过程中启动的进程,和终端无关进程

            前台进程:跟终端相关,通过终端启动的进程

            注意:两者可相互转化

        进程状态:

            运行态:running

            就绪态:ready

            停止态:stopped 暂停于内存中,但不会被调度,除非手动启动

            将死态:zombie  结束进程,父进程结束前,子进程不关闭

        睡眠态:

            可中断:interruptable

    不可中断:uninterruptable

        进程的分类:

            CPU-Bound:CPU密集型,非交互式

             IO-Bound: IO密集型,交互

            Linux系统状态的查看及管理工具:

            pstree,ps,pidof,pgrep,top,htop,glance,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup

         pstree命令:

            pstree – display a tree of processes

            ps命令:process state

            ps -report a snapshot of the current processes

            Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中

       支持三种选项:

            unix选项  如-A -e

            BSD选项   如a

            GUN选项   如–help

            默认显示当前终端中的进程:

            a 选项包括所有终端中的进程

            x选项包括不链接终端的进程

            u选项显示进程所有者的信息

            f选项显示进程的父进程

            o属性….选项显示定制的信息pid  comm %cpu %mem state tty euser ruser

        VSZ:virtual Memory size 虚拟内存集 线性内存

        RSS:ReSident Size  常驻内存集

        STAT: 进程状态

            R:running

            S:interruptable sleeping

            D:uninterruptable sleeping

            T:stopped

            Z:zombie

            +:前台进程

            I:多线程进程

            N:低优先级进程

            <:高优先级进程

            s:session leader 会话(子进程)发起者

        常用组和:-ef

            -e:显示所有进程

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

        常用组和:-eFH

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

            -H:以进程层级格式显示进程相关信息

        常用组和:自定义

            -eo:显示所有进程,     定制属性 例如:[root@nzg7 ~]# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm

            -axo: 所有终端所有进程,定制属性 例如:[root@nzg7 ~]# ps -axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

            ni:nice值

            pri:priority,优先级

              psr:processor,cpu编号

          rtprio:实时优先级

       最灵活:ps 选项 | 其他命令

         按预定义的模式:pgrep

            pgrep [options] pattern

            -u uid:effective user,生效者

            -U uid:real user  真正的发起运行命令者

            -t terminal:与指定终端相关的进程

            -l 显示进程名

            -a 显示完整格式的进程名

            -P pid:显示指定进程的子进程

        按确切的程序名称:/sbin/pidof

        $pidof bash

        uptime

              显示当前时间,系统已启动的时间,当前上线人数,系统平均负载(1、5、10分钟的平均负载,一般不会超过1)

        系统平均负载:

            指在特定时间间隔内运行队列中的平均进程数

            如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能良好,如果每个CPU内核的任务大于5,那么这台机器的性能有严重问题

            如果linux主机是1个双核cpu的话,当load Average 为6的时候说明机器已经充分使用了

    

     top:内置命令

 排序:

            p:已占据的cpu百分比,%cpu

            M:占据内存百分比,%MEM

            T:累积占据CPU时长,TIME+

        首部信息显示:

             uptime信息:   |命令

            tasks及cpu信息:+命令

                cpu分别显示:   1(数字)

                Memory信息:   m命令

                退出命令:   q

                修改刷新时间间隔:s

                终止指定进程:k

                保存文件:W

          

        栏位信息简介

              us:用户空间

              sy:内核空间

              ni:调整nice时间

              id:空闲

              wa:等待IO时间

              hi:硬中断

              si:软中断(模式切换)

              s+:虚拟机偷走的时间

       PID (Process Id):任务的进程ID

            PPID (Parent Process Pid):父任务的进程ID

            RUSER (Real User Name):任务的所有者真实名称

            UID (User Id):任务所有者ID

            USER (User Name):任务所有者名称

            GROUP (Group Name):任务所有者群组名

            TTY (Controlling Tty):终端

            PR (Priority):优先级

            %CPU (CPU usage):CPU使用率

            %MEM (Memory usage (RES)):内存使用率

            S (Process Status):进程状态

            TIME+ (CPU Time, hundredths):CPU时间,精确到秒

        选项:

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

             -n #:以批次方式

            -b:以批次方式

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

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

                  #htop需要自己下载

        子命令:

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

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

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

            t: 显示进程树

            vmstat命令:虚拟内存信息

            vmstat [options] [delay [count]]

            vmstat 2 5

        procs:

            r:等待运行的进程的个数,和核心数有关

            b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度)

            memory: 

            swpd:   交换内存的使用总量

            free:  空闲物理内存总量

            buffer:用于buffer的内存总量

            cache: 用于cache的内存总量

        swap:

            si:从磁盘交换进内存的数据速率(kb/s)

            so:从内存交换至磁盘的数据速率(kb/s)

            io:

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

            bo: 保存数据至块设备的速率

            system:

            in: interrupts, 中断速率,包括时钟

            cs: context switch, 进程切换速率

        cpu:

            us: Time spent running non-kernel code

            sy: Time spent running kernel code

            id: Time spent idle. Linux 2.5.41前,包括IO-wait time.

            wa: Time spent waiting for IO. 2.5.41前,包括in idle.

            st: Time stolen from a virtual machine. 2.6.11前, unknown.

        选项:

            -s: 显示内存的统计数据

        dstat命令:

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

             -c:显示cpu相关信息

             -d:显示disk的相关信息

             -g;显示page相关统计数据

             -m:显示Memory相关统计数据

             -n:显示network相关统计数据

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

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

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

             –tcp tcp链接数

             –udpudp链接数

             –socket 查看详细监控信息

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

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

             –top-mem:显示最占用内存的进程

             –top-latency:显示延迟最大的进程

    进程管理工具

        kill:

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

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

             常用信号:man 7 signal

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

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

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

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

             18)SIGCONT:继续运行

             19)SIGSTOP:后台休眠

              指定信号的方法:

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

             (2)信号的完整名称:SIGHUP

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

              按PID: kill [-SIGNAL] pid …

              按名称:killall [-SIGNAL] comm …

              按模式:pkill [options] pattern

               -SIGNAL

               -u uid:effective user,生效者

               -Uuid:real user,真正发起运行命令着

               -t terminal:与指定终端相关的进程

               -l:显示进程名

               -a:显示完整格式的进程名

               -p pid:显示父进程为此处指定的进程的进程列表

        linux作业控制:

             前台作业:通过终端启动,且启动后一直占据终端

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

       如何让作业运行在后台?

                 运行中的作业:ctrl+z

        尚未启动的作业:COMMand &

                 后台作业虽然被送往后台运行,但其依然与终端相关,退出终端,将关闭后台作业,如果希望送往后台后,剥离与终端的关系

             #nohup COMMAND& #screen:COMMAND

          查看所有作业;

                jobs

        作业控制:

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

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

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

        进程优先级:

             默认优先级:100-139

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

             只有根用户才能降低nice值(提高优先级)

        nice命令:

            nice [OPTION] [COMMAND [ARG]…]

        renice命令:

            renice [-n] priority pid…

        查看:

            ps axo pid,comm,ni

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