zoukankan      html  css  js  c++  java
  • 1-10 RHLE7 系统进程管理

    1.1-Linux进程管理

    程序、进程、线程

    程序:一组指令的集合    QQ

    进程:程序的执行就是进程。也可以把进程看成一个独立的程序,
    在内存中有其对应的代码空间和数据空间,一个进程所拥有的数据和代码只属于自己。
    进程是资源分配的基本单位,也是调度运行的基本单位。

    线程:线程被人们认为是轻量级的进程,它是进程中单独运行的程序。
    换句话说,就是一个进程可以包含多个线程,并且至少有一个主线程,
    同时同一进程的线程共享该进程的代码和数据。

    程序和进程的区别
    1、程序是静态的,它只是一组指令的集合,不具有任何的运行意义。
         而进程是程序运行的动态过程.
    2、进程和程序并不是一一对应的关系,
         相同的程序运行在不同的数据集上就是不同的进程。
    3、进程还具有并发性和交往性,而程序却是封闭的。

    进程和线程的区别
    1、一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有。
    2、线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口。
         它必须组成进程才能被执行。

    1.1-2进程的属性:
    进程ID(PID):是唯一的数值,用来区分进程;

    父进程的ID(PPID);

    启动进程的用户ID(UID)和所归属的组(GID);

    进程状态:状态分为运行R、休眠S、僵尸Z;

    进程执行的优先级;数值越小,优先级越高,取值在-20~19

    进程所连接的终端名;

    进程资源占用:比如占用资源大小(内存、CPU占用量);

    对于Linux进程的管理,是通过进程管理工具实现的,比如ps、kill、工具
    ================================================

    1.2 ps top pgrep pstree netstat工具的使用方式

    1.2.1 ps命令:监视进程工具(静态的static)
    ps - report a snapshot of the current processes.

    ps命令有三种显示选项:
    分别是
    UNIX 选项  需要使用一个破折号-,可以组合使用
    BSD选项    可以不使用破折号-,可以组合   ps aux / ps -aux 
                会显示进程的状态,和命令
    GNU长选项  需要两个破折号--

    ps是查看进程用的最普遍的命令,(注ps不是photoshop)
    常用选项:
    -a 显示所有用户进程
    -u 显示用户名和启动时间
    -x 显示没有控制终端的进程
    -e 显示所有进程(包括没有终端的进程)
    -l  长格式输出显示的进程
    -w 加宽显示,可使用多个w
    显示所有进程命令:
    ps -aux     #是用BSD的格式来显示进程
    ps -el         #是用标准的格式显示进程

    这两条命令,可使用管道,配合 more ,less 或 grep使用
    [root@xiaogan ~]# ps -aux | grep sshd
    [root@xiaogan ~]# ps -aux | grep httpd


    查看隶属于自己进程详细信息
    [root@xiaogan ~]# ps -l
    [root@xiaogan ~]# ps -u

    ps  -aux 输出的解释:

    USER  启动该进程的用户
    PID    进程的ID,数值唯一,可通过进程号对其进行各种操作
    %CPU  占用CPU的时间比
    %MEM  占用内存的百分比
    VSZ      占用虚拟内存大小
    RSS       缓存大小?!
    NI        进程的优先级
    TTY        进程连接的终端名
    STAT     进程的状态
    START   进程的启动时间
    TIME     进程占用CPU的总时间
    COMMAND  进程的命令名
    ================================================

    1.2.2 top命令:动态显示进程信息
    top - display Linux processes
    前五行数据解释:


    任务队列信息-->第一行:
    top - 19:36:08 up  2:37,  2 users,  load average: 0.00, 0.01, 0.05
    top--> 命令名
    19:36:08-->当前时间19:36:08
    up 2:37-->系统启动时间,  
    2 users-->有两个登录用户,  
    load average: 0.00, 0.01, 0.05-->系统负载,
                                      即任务队列的平均长度。
                                      三个数值分别为1分钟、5分钟、15分钟前到现在的平均值


    进程和CPU的信息-->第二行、第三行:
    Tasks: 519 total,   1 running, 518 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  0.8 us,  0.7 sy,  0.0 ni, 98.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    Tasks: 519 total-->进程总数519个
    1 running, -->正在运行的进程数1个
    518 sleeping,   -->睡眠的进程数
    0 stopped,   -->停止的进程数
    0 zombie-->僵尸进程数
    %Cpu(s):  0.8 us,  -->系统用户进程使用CPU百分比
    0.7 sy,  -->内核中的进程使用CPU百分比
    0.0 ni, -->用户进程空间内改变过优先级的进程占用CPU百分比
    98.5 id,  -->空闲CPU百分比
    0.0 wa,  0.0 hi,  0.0 si,  0.0 st


    内存和交换分区的信息-->第四行第五行
    KiB Mem :  2033556 total,   594904 free,   623056 used,   815596 buff/cache
    KiB Swap:  4194300 total,  4194300 free,        0 used.  1158976 avail Mem
    KiB Mem :  2033556 total,-->物理内存总量
    594904 free,-->空闲的内存总量
    623056 used,-->使用的物理内存总量
    815596 buff/cache-->用作内核缓存的内存辆。和free -k 一个意思
    KiB Swap:  4194300 total,-->交换区总量
    4194300 free,-->空闲的交换区总量
    0 used.-->使用的交换区总量
    1158976 avail Mem-->总的可利用内存是多少

    显示的进程信息解析
    列名        含义
    PID        进程id
    USER        进程所有者的用户名
    NI        进程优先级。 nice值。负值表示高优先级,正值表示低优先级
    RES        实际使用内存大小。
    S        进程状态。
                D=不可中断的睡眠状态
                R=运行
                S=睡眠
                T=跟踪/停止
                Z=僵尸进程
    %CPU        上次更新到现在的CPU时间占用百分比
    %MEM        进程使用的物理内存百分比
    TIME+        进程使用的CPU时间总计,单位1/100秒
    COMMAND        命令名/命令行

    快捷键操作:
    top快捷键
    默认3s刷新一次
    空格 :立即刷新。
    q退出
    M按内存排序
    P按CPU排序

    ================================================


    1.2.3 使用pgrep管理工具
    作用:查找服务进程号
    语法格式:pgrep  [服务名称]
    [root@xiaogan ~]# pgrep httpd
    [root@xiaogan ~]# pgrep sshd

    [root@xiaogan ~]# pgrep --help
    
    Usage:
    pgrep [options] <pattern>
    
    Options:
    -d, --delimiter <string>  specify output delimiter
    -l, --list-name          list PID and process name
    -a, --list-full          list PID and full command line
    -v, --inverse            negates the matching
    -w, --lightweight        list all TID
    -c, --count              count of matching processes
    -f, --full                use full process name to match
    -g, --pgroup <PGID,...>  match listed process group IDs
    -G, --group <GID,...>    match real group IDs
    -n, --newest              select most recently started
    -o, --oldest              select least recently started
    -P, --parent <PPID,...>  match only child processes of the given parent
    -s, --session <SID,...>  match session IDs
    -t, --terminal <tty,...>  match by controlling terminal
    -u, --euid <ID,...>      match by effective IDs
    -U, --uid <ID,...>        match by real IDs
    -x, --exact              match exactly with the command name
    -F, --pidfile <file>      read PIDs from file
    -L, --logpidfile          fail if PID file is not locked
    --ns <PID>                match the processes that belong to the same
                              namespace as <pid>
    --nslist <ns,...>        list which namespaces will be considered for
                              the --ns option.
                              Available namespaces: ipc, mnt, net, pid, user, uts
    
    -h, --help    display this help and exit
    -V, --version  output version information and exit
    
    For more details see pgrep(1).

    ======================================================


    1.2.4 pstree工具使用
    pstree命令以树状图显示进程间的关系(display a tree of processes)。
    格式:pstree
    以树状图显示进程,只显示进程的名字,且相同进程合并显示。
    格式:pstree -p
    以树状图显示进程,还显示进程PID。

    [root@xiaogan ~]# pstree --help
    pstree: unrecognized option '--help'
    Usage: pstree [ -a ] [ -c ] [ -h | -H PID ] [ -l ] [ -n ] [ -p ] [ -g ] [ -u ]
                  [ -A | -G | -U ] [ PID | USER ]
          pstree -V
    Display a tree of processes.
    
      -a, --arguments    show command line arguments
      -A, --ascii        use ASCII line drawing characters
      -c, --compact      don't compact identical subtrees
      -h, --highlight-all highlight current process and its ancestors
      -H PID,
      --highlight-pid=PID highlight this process and its ancestors
      -g, --show-pgids    show process group ids; implies -c
      -G, --vt100        use VT100 line drawing characters
      -l, --long          don't truncate long lines
      -n, --numeric-sort  sort output by PID
      -N type,
      --ns-sort=type      sort by namespace type (ipc, mnt, net, pid, user, uts)
      -p, --show-pids    show PIDs; implies -c
      -s, --show-parents  show parents of the selected process
      -S, --ns-changes    show namespace transitions
      -u, --uid-changes  show uid transitions
      -U, --unicode      use UTF-8 (Unicode) line drawing characters
      -V, --version      display version information
      -Z,
      --security-context  show SELinux security contexts
      PID    start at this PID; default is 1 (init)
      USER  show only trees rooted at processes of this user

    pstree

    pstree -p

    ======================================================

    1.2.5 netstat工具的使用

    作用:打印网络连接、路由表、接口统计等
    Print network connections, routing tables, interface statistics, masquerade connections, and mul‐ticast memberships
    参数:常用:
    -a或–all 显示所有连接中的接口。
    -c或–continuous 持续列出网络状态。
    -C或–cache 显示路由器配置的快取信息。
    -e或–extend 显示网络其他相关信息。
    -F或–fib 显示FIB。
            -g或–groups 显示多重广播功能群组组员名单。
    -h或–help 在线帮助。
    -i或–interfaces 显示网络界面信息表单。
    -l或–listening 显示监控中的服务器的接口。
    -M或–masquerade 显示伪装的网络连线。
    -n或–numeric 直接使用IP地址,而不通过域名服务器。
    -N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称。
    -o或–timers 显示计时器。
    -p或–programs 显示正在使用接口的程序识别码和程序名称。
    -r或–route 显示Routing Table。
    -s或–statistice 显示网络工作信息统计表。
    -t或–tcp 显示TCP传输协议的连接状况。
    -u或–udp 显示UDP传输协议的连接状况。
    -v或–verbose 显示指令执行过程。
    -V或–version 显示版本信息。
    -w或–raw 显示RAW传输协议的连线状况。
    -x或–unix 此参数的效果和指定”-A unix”参数相同。
    –ip或–inet 此参数的效果和指定”-A inet”参数相同。

    显示所有tcp连接
    [root@xiaogan ~]# netstat -anlpt

    显示所有UDP连接
    [root@xiaogan ~]# netstat -anlpu

    查看某个服务的端口:
    [root@xiaogan ~]#nestat -anlpt | grep httpd

     

    ====================================================

    1-3. 虚拟文件系统  /proc 、 /sys

    Linux一切皆文件,设备(文件)可以通过读写来操作;

    /proc是内存中有关系统进程的信息;
    /sys是有关系统内核以及驱动的信息;

    cat /proc/cpuinfo
    //查看当前CPU信息

    #开启内核转发功能
    [root@xiaogan ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
    [root@xiaogan ~]# cat /proc/sys/net/ipv4/ip_forward
    1
    [root@xiaogan ~]#


    ====================================================


    1.4- LINUX后台进程与前台进程

    LINUX后台进程与前台进程的区别
    Linux后台进程:
    也叫守护进程(Daemon),是运行在后台的一种特殊进程。
    守护的意思就是不受终端控制。Linux的大多数服务器就是用守护进程实现的。
    比如,Web服务器httpd等。
    Linux前台进程:
    用户使用的有控制终端的进程.

    进程的前台与后台运行
    跟系统任务相关的几个命令:fg、bg、jobs、&、ctrl+z
            :用在一个命令的最后,可以把这个命令放到后台执行.
     ctrl + z: 将一个正在前台执行的命令放到后台,并且暂停.
    jobs:查看当前有多少在后台运行的进程.
    fg: 将后台中的命令调至前台继续运行  
    如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
    bg :将一个在后台暂停的命令,变成继续执行
    如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

    实战:恢复被挂起的进程
    [root@xiaogan ~]# vim a.txt

    [1]+  Stopped                vim a.txt
    [root@xiaogan ~]# jobs
    [1]+  Stopped                vim a.txt
    [root@xiaogan ~]# fg
    vim a.txt
    [root@xiaogan ~]#

    kill进程的终止


    控制(关闭)进程:
    kill用法 关闭进程:kill  [进程号]
    通过信号的方式来控制进程
    [root@xiaogan ~]#  kill -l  #查看可用的信号

    杀死进程:
    [root@xiaogan ~]# kill -9 5873
    [root@xiaogan ~]# kill -s 9 5873

    杀死全部进程:killall
    [root@xiaogan ~]# killall httpd

    ====================================================


    1.5-进程的优先级管理
    进程的优先级的定义

    优先级取值范围为(-20,19)
    越小优先级越高, 默认优先级是0

    nice指定程序的运行优先级

    使用top命令查看优先级

        作用:指定程序的运行优先级

        格式:nice -n command
    实战:
    nice -n 5 vim a.txt
    输入内容
    ctrl+z 挂起(执行很快,挂起能够看到pid)
    ps -aux | grep vim
    top -p pid查看

    将vim进程挂起,并查看其PID:

    使用top -p PID 查看VIM优先级

     

    使用renice n -pid PID命令,设置进程优先级,并查看

    使用nice命令,直接设置即将运行的命令的优先级,并查看

     

    ====================================================


    1.6-文件控制台的窗口管理

    screen 实战后台实时执行命令
    1、安装screen软件包
    [root@xiaogan ~]#rpm -ivh /mnt/Packages/screen-4.1.0-0.21.20120314git3c2946.el7.x86_64.rpm
    或者
    [root@xiaogan ~]# yum -y install screen

    [root@xiaogan ~]# which screen
    /usr/bin/which: no screen in (/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin)
    [root@xiaogan ~]# rpm -ivh /mnt/Packages/screen-4.1.0-0.21.20120314git3c2946.el7.x86_64.rpm
    warning: /mnt/Packages/screen-4.1.0-0.21.20120314git3c2946.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
    Preparing...                          ################################# [100%]
    Updating / installing...
      1:screen-4.1.0-0.21.20120314git3c29################################# [100%]
    [root@xiaogan ~]# which screen
    /usr/bin/screen
    [root@xiaogan ~]#

    Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。
    直接在命令行键入screen命令
    screen


    Screen将创建一个执行shell的全屏窗口。你可以执行任意shell程序,就像在ssh窗口中那样。

    在该窗口中键入exit退出该窗口,
    Screen命令后跟你要执行的程序。
    screen vim xuegod.sh

    Screen创建一个执行vim xuegod.sh的单窗口会话,退出vi将退出该窗口/会话。

    进入screen
    vim 执行操作
    以上两种方式都创建新的screen会话。
    我们还可以在一个已有screen会话中创建新的窗口。在当前screen窗口中Ctrl键+a键,之后再按下c键,screen 在该会话内生成一个新的窗口.


    screen还有更高级的功能。你可以不中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。
    例如,我们在做某个大型的操作但是突然之间断开:
    (常用在远程连接某服务器时,我们可以使用screen命令,执行需要等待时间很长的操作,若中间远程连接断开,不影响这个操作的执行)


    实战:
    screen  进入
    执行updatedb
    模拟中断
    模拟假设突然会话断开
    那么在screen窗口键入Ctrl+a+d ,Screen会给出detached提示:
    (只要不输入exit,而造成的退出,都可以重连)
    暂时中断会话

    怎样找到该screen会话,继续操作呢?
    screen -ls
    查看id

    重新连接会话:
    screen -r id

  • 相关阅读:
    Python staticmethod
    pandas通过字典生成dataframe
    关于series的统计
    python的*args与**kwargs
    python global
    matplotlib画子图时设置总标题
    matplotlib两种画散点图的方式
    idea下web工程的编译和输出设置
    Vue&webpack入门实践
    《图解设计模式》读书笔记6-1 VISITOR模式
  • 原文地址:https://www.cnblogs.com/xiaogan/p/5769382.html
Copyright © 2011-2022 走看看