zoukankan      html  css  js  c++  java
  • 系统进程管理

    什么是进程

    已启动的可执行程序的运行实例

    进程的组成

    • 已分配内存的地址空间
    • 安全属性,包括所有权凭据和特权
    • 程序代码的一个或多个执行线程
    • 进程状态

    程序

    二进制文件,静态,如/bin/date,/usr/sbin/sshd

    进程

    程序运行的过程,动态,有生命周期及运行状态

     fork:分支

    zombie:僵尸(程序没有正常退出)

    进程ID(PID),父进程ID(PPID)

    所有进程都是第一个系统进程的后代

    Centos5或6 PID为1的进程是  init

    Centos7 PID为1的进程是 systemd

    僵尸进程

    专业忽悠语:

    一个进程使用fork创建子进程,如果子进程退出,父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程成为僵尸进程。

    白话文:

    父进程退出了wait,但子进程并没有结束,那么这些子进程的使用的资源,如内存等父进程释放或管理不了了,被称为僵尸进程。

    僵尸进程正常情况下是kill不掉的,可以关机结束掉。

    进程的属性

    进程ID:PID,唯一的数值,用来区分进程

    父进程ID:PPID

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

    进程的状态:运行R、休眠S、僵尸Z

    进程执行的优先级

    进程所连接的终端名

    进程资源占用:所占用CPU,内存的大小

    使用PS命令查看进程

    常用参数:

    a:显示跟当前终端关联的所有进程

    u:居于用户的格式显示(U:显示某用户ID所有的进程)

    x:显示所有进程,不以终端机来区分

    [root@tzPC ~]# ps -aux | head
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root          1  0.0  0.3 128288  6936 ?        Ss   14:43   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
    root          2  0.0  0.0      0     0 ?        S    14:43   0:00 [kthreadd]
    root          4  0.0  0.0      0     0 ?        S<   14:43   0:00 [kworker/0:0H]
    root          5  0.0  0.0      0     0 ?        S    14:43   0:00 [kworker/u256:0]
    root          6  0.0  0.0      0     0 ?        S    14:43   0:00 [ksoftirqd/0]
    root          7  0.0  0.0      0     0 ?        S    14:43   0:00 [migration/0]
    root          8  0.0  0.0      0     0 ?        S    14:43   0:00 [rcu_bh]
    root          9  0.0  0.0      0     0 ?        R    14:43   0:00 [rcu_sched]
    root         10  0.0  0.0      0     0 ?        S<   14:43   0:00 [lru-add-drain]

    注意:最后一列

    [xx]使用方括号括起来的是内核进程,没有括起来的是用户进程。

    各参数含义:

    USER:启动这些进程的用户

    PID:进程的ID

    %CPU:占用CPU百分比

    %MEM:占用内存百分比

    VSZ:进程占用的虚拟内存大小,单位KB,比如预先分配10G内存及虚拟内存,实际占用1G及物理内存

    RSS:进程占用物理内存的大小,单位KB

    STAT:该程序目前的状态

    START:该进程被触发启动时间

    TIME:该进程实际使用CPU运行的时间

    Linux进程有5中状态

    R :正在运行状态;

    S :处于休眠状态;

    T :该程序停止了;

    Z :该程序应该已经终止,但是其父进程已不存在,僵尸进程;

    D :不可中断状态,通常为IO进程

    5个基本状态后,还可以加一些字母,比如:Ss、R+,其含义如下:

     其他状态

    <: 表示进程运行在高优先级上

    N: 表示进程运行在低优先级上

    L: 表示进程有页面锁定在内存中

    s: 表示该进程之下有子进程

    l: 表示进程是多线程的

    +: 表示当前进程运行在前台

    START:该 process 被触发启动的时间;

    TIME :该 process 实际使用 CPU 运作的时间。如果为0:00表示还没有用到1秒钟

    COMMAND:该程序的实际指令

    以T状态为例:

    新开一个终端vim a.txt

    回原来的终端ps -aux | grep a.txt会发现为S+,为前台睡眠状态

    回到vim a.txt终端,ctrl +z 停止

    回到原来的终端会发现状态为T

    ctrl-c 是发送 SIGINT 信号,终止一个进程

    ctrl-z 是发送 SIGSTOP信号,挂起一个进程将作业放置到后台(暂停)

    ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF代表输入完成或者注销

    以D状态为例

    新开一个终端tar -zcvf usr.tar.gz /usr 打包/usr

    返回旧终端ps -aux | grep tar多执行几次会发现从S+变为R+最后成为D+

     ps -ef 使用

    -e 显示所有进程

    -f 显示完整格式输出

    [root@tzPC ~]# ps -ef | more
    UID         PID   PPID  C STIME TTY          TIME CMD
    root          1      0  0 14:43 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
    root          2      0  0 14:43 ?        00:00:00 [kthreadd]
    root          4      2  0 14:43 ?        00:00:00 [kworker/0:0H]
    root          5      2  0 14:43 ?        00:00:01 [kworker/u256:0]
    root          6      2  0 14:43 ?        00:00:00 [ksoftirqd/0]
    root          7      2  0 14:43 ?        00:00:00 [migration/0]
    root          8      2  0 14:43 ?        00:00:00 [rcu_bh]
    root          9      2  0 14:43 ?        00:00:01 [rcu_sched]
    root         10      2  0 14:43 ?        00:00:00 [lru-add-drain]
    root       1573    905  0 14:43 tty1     00:00:00 -bash
    root       1597      1  0 14:43 ?        00:00:00 /usr/sbin/sshd -D
    root       1702   1597  0 14:48 ?        00:00:00 sshd: root@pts/0
    root       1706   1702  0 14:48 pts/0    00:00:00 -bash
    root       1920   1597  0 15:24 ?        00:00:00 sshd: root@pts/1

    UID: 启动这些进程的用户

    PID: 进程的ID

    PPID: 父进程的进程号

    C: 进程生命周期中的CPU利用率

    STIME: 进程启动时的系统时间

    TTY: 开始此进程的终端。如果显示  ?表示与终端无关,这种进程一般是内核进程。另外, tty0-tty6 称为虚拟终端,tty0表示当前使用的虚拟终端的别名,tty7表示图形化界面,对虚拟终端操作都会发送到控制终端上,pts/0为伪终端,打开一个terminal就为pts/0,在打开一个terminal就为pts/1;

    TIME: 运行进程一共累计占用的CPU时间

    CMD: 启动的程序名称

     

    ps -l 的使用

     -l 显示长列表

    [root@tzPC tz]# ps l
    F   UID    PID   PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
    4     0   1573    905  20   0 115444  2064 n_tty_ Ss+  tty1       0:00 -bash
    4     0   4045   4044  20   0 115448  2080 do_wai Ss   pts/2      0:00 /bin/bash
    4     0   4057   4045  20   0 149148  5004 poll_s S+   pts/2      0:00 vim a.txt
    4     0  51256      1  20   0 110108   856 n_tty_ Ss+  tty3       0:00 /sbin/agetty --noclear tty3 linux
    4     0  51259      1  20   0 110108   856 n_tty_ Ss+  tty4       0:00 /sbin/agetty --noclear tty4 linux
    4     0  51260      1  20   0 110108   852 n_tty_ Ss+  tty2       0:00 /sbin/agetty --noclear tty2 linux
    4     0  53285  53280  20   0 115580  2204 do_wai Ss   pts/1      0:00 -bash
    0     0  66386  53285  20   0 153248  1488 -      R+   pts/1      0:00 ps l

     F:内核分配给进程的系统标记

    S:进程的状态

    PRI:进程的优先级,数值越大优先级越低

    NI:谦让度值用来参与决定优先级

    ADDR:进程的内存地址

    SZ:假如进程被换出,所需交换空间的大小

    WCHAN:进程休眠的内核函数地址

     

     

    参考:https://www.iteye.com/blog/jblzdg-2088269

    今天的学习是为了以后的工作更加的轻松!
  • 相关阅读:
    洛谷 P2872 [USACO07DEC]道路建设Building Roads
    cogs 29. 公路建设
    cogs 7. 通信线路
    cogs 2478. [HZOI 2016]简单的最近公共祖先
    洛谷 P1342 请柬
    洛谷 P1186 玛丽卡
    洛谷 P1491 集合位置
    启动、停止、重启服务
    洛谷——P1025 数的划分
    洛谷——P3368 【模板】树状数组 2
  • 原文地址:https://www.cnblogs.com/tz90/p/13284959.html
Copyright © 2011-2022 走看看