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

(0)
闹钟哥闹钟哥
上一篇 2016-09-12
下一篇 2016-09-12

相关推荐

  • 用户组和权限管理的相关命令

    1,useradd  新建用户 useradd -u uid username 创建用户时指定uid(如不指定则Centos:500-60000, Centos7: 1000-60000) -o -u uid username  创建用户时指定uid(可以与已存在用户的uid相同) -g groupname username 创…

    2017-07-25
  • HAProxy初探及简单案例_Net21_第二周

    前言 随着互联网业务的迅猛发展,大型电商平台和门户网站对系统的可用性和可靠性的要求越来越高,高可用集群、负载均衡集群成为一种热门的系统架构解决方案。在众多的负载均衡解决方案中,有基于硬件的负载均衡设备,例如F5、Big-IP等,也有基于软件的负载均衡产品,如LVS、Nginx以及本文介绍的HAProxy等。在软件的负载均衡产品中,又分为两种实现方式,分别是基…

    Linux干货 2016-07-22
  • Vim编辑工具用法的总结

    描述:    Vim是一款强大的命令行界面的文本编辑器,是vi的高级版本,先说下学习它的原因:  1,所有的UNIX Like 系统都会内置vi文本编辑器,其他的文本编辑器则不一定会存在;  2,很多软件的编辑接口都会主动调用vi  3,vim具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性,方便程序设…

    Linux干货 2016-08-11
  • 马哥教育网络班21期+第四周课程练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 ~]# cp -r /etc/skel /home/tuser1; chmod -R gx=— /home/tuser1 [root@mag…

    Linux干货 2016-08-02
  • Python from entry to abandon

          学习Linux已经有大致两周了,依然感觉到自己仍然在运维的大门外徘徊。于是我想要找到一个在Linux之外的业余方向,可以作为枯燥基础学习的调节。没过多久我就发现了Python可以 说是钦定的选择,它作为Linux的内置语言,传言风格简洁优美,功能强大。Python老生常谈的缺点是效率不高,哎,没办…

    Linux干货 2017-04-01
  • 双网卡绑定及单网卡多IP地址实现方法

    Bonding就是将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。当然,直接给两块网卡设置同一IP地址是不可能的。通过bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址。mode=1(active-backup):一个网卡处于活动状态 ,一个处于备份状态,所有流量都在主链路上处理。当活动网卡down掉时,启用备份…

    Linux干货 2016-09-05