美文网首页
进程、vim

进程、vim

作者: _str_ | 来源:发表于2019-08-03 13:57 被阅读0次

    进程和线程

    进程:操作系统资源分配的基本单位
    线程:任务调度和执行的基本单位
    每个进程中最少有一个线程在运行,当这个进程运行时其他进程只能排队等待,此进程结束后根据优先级决定是否可以执行

    子进程和父进程

    演示图.png

    子bash相当于子进程 第一个进程为0是所有的进程的父进程

    多人、多任务、多环境

    多重登陆环境的七个基本终端窗口:
    在 Linux 当中,默认提供了六个文字界面登陆窗口,以及一个图形界面,你可以使用 [Alt]+[F1].....[F7] 来切换不同的终端机界面,而且每个终端机界面的登陆者还可以不同人

    查看系统中的进程

    ps 获取到某个时间点的程序运行情况(静态)

    ps aux #查看所有的进程信息
    -A #显示所有的process
    -a #不与终端有关的所有进程
    -u #有效使用者相关的进程
    x  #通常与a参数一起使用列出完整信息
    

    ps aux各字段意义

    USER:  该 process 属于那个使用者帐号的?
    PID :  该 process 的程序识别码。
    %CPU:  该 process 使用掉的 CPU 资源百分比;
    %MEM:  该 process 所占用的实体内存百分比;
    VSZ :  该 process 使用掉的虚拟内存量 (KBytes)
    RSS :  该 process 占用的固定的内存量 (KBytes)
    TTY :  该 process 是在那个终端机上面运行,若与终端机无关则显示 ?,另外, tty1-tty6 是本机上面的登陆者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
    STAT:  该程序目前的状态,状态显示与 ps -l 的 S 旗标相同 (R/S/T/Z)
    START: 该 process 被触发启动的时间;
    TIME : 该 process 实际使用 CPU 运行的时间。
    COMMAND:该程序的实际指令为何
    

    STAT 下的状态有:

    N:表示优先级最高
    R:该程序在运行中
    S:该程序在睡眠中,可以被唤醒
    D:不可唤醒的睡眠状态,通常可能在等待I/O
    T:停止状态,可能在jobs控制(后台暂停)
    Z:僵尸状态,程序已经终止但无法被移除至内存外

    僵尸进程

    造成僵尸程序的成因是因为该程序已经执行完毕,或者因故应该要终止了,但该程序的父进程无法完整的将该程序结束掉,而那个程序一直在内存当中。如果你发现某个程序的CMD后面还接上<defunct>就代表该程序是僵尸程序

    top动态

    选项与参数:
    -d  :后面可以接秒数,就是整个程序画面更新的秒数。默认是 5 秒;
    -b  :以批次的方式执行 top ,还有更多的参数可以使用喔!
    通常会搭配数据流重导向来将批次的结果输出成为文件。
    -n  :与 -b 搭配,意义是,需要进行几次 top 的输出结果。
    -p  :指定某些个 PID 来进行观察监测而已。
    在 top 执行过程当中可以使用的按键指令:
    ? :显示在 top 当中可以输入的按键指令;
    P :以 CPU 的使用资源排序显示;
    M :以 Memory 的使用资源排序显示;
    N :以 PID 来排序喔!
    T :由该 Process 使用的 CPU 时间累积 (TIME+) 排序。
    k :给予某个 PID 一个讯号  (signal)
    r :给予某个 PID 重新制订一个 nice 值。
    q :离开 top 软件的按键。
    
    top 中的各个行的意义
    top - 21:32:09 up 13:11,  2 users,  load average: 0.00, 0.01, 0.05
    Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  1.7 us,  2.9 sy,  0.0 ni, 95.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem :  2028116 total,   102336 free,   785636 used,  1140144 buff/cache
    KiB Swap:  7340024 total,  7337648 free,     2376 used.   854424 avail Mem 
    
       PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND    
         2 root      20   0       0      0      0 S   0.0  0.0   0:00.10 kthreadd 
    

    第一行

    21:32:09 系统当前时间
    up 13:11 系统开机到现在经过了 13 小时 11分钟了
    2users : 当前 2 个用户在线
    load average: 0.00, 0.01, 0.05 系统1分钟、5分钟、15分钟的CPU负载信息

    第二行

    Tasks: 任务
    1 total, 总共1个任务,就是 1 个进程
    0 running, 0 个进程是 运行状态
    1 sleeping, 1 个进程是 休眠状态
    0 stopped, 0 个进程是 停止状态
    0 zombie, 0 个进程是僵死状态

    第三行

    %Cpu(s): 表示这一行显示CPU总体信息 ,单位是百分比
    1.4 us, 用户态进程占用CPU时间百分比,不包含renice值为负的任务占用的CPU的时间。
    3.4 sy, 内核占用CPU时间百分比
    0.0 ni, 改变过优先级的进程占用CPU的百分比
    95.1 id, 空闲CPU时间百分比
    0.0 wa, 等待I/O的CPU时间百分比
    0.0 hi, CPU硬中断时间百分比
    0.2 si, CPU软中断时间百分比
    0.0 st,这个虚拟机被hypervisor偷去的CPU时间(hypervisor管理程序)
    注:这里显示数据是所有cpu的平均值,如果想看每一个cpu的处理情况,按1即可;收起,再次按1

    第四行

    KiB Mem : 内存信息
    2028116 total, 物理内存总容量
    102336 free, 空闲物理内容容量
    785636 used, 已使用的物理内存
    1140144 buff/c 用作内核缓存的物理内存量

    第五行

    KiB Swap: 交互分区
    7340024 total, 总共
    7337648 free, 空闲
    2376 used. 已用
    854424 avail Men 有效提供给程序使用的内存,这个并不是 Swap 分区的容量

    第六行

    PID:进程的ID
    USER:进程拥有者
    PR:Priority 的简写,进程的优先级别,越小越优先被执行
    NI:Nice 的简写,与 Priority 有关,也是越小越早被执行;
    VIRT:进程占用的虚拟内存
    RES:进程占用的物理内存
    SHR:进程使用的共享内存
    S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
    %CPU:进程占用CPU的使用率
    %MEM:进程使用的物理内存和总内存的百分比
    TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。

    top常用交互命令

    q:退出top命令
    <Space>:立即刷新
    s:设置刷新时间间隔
    c:显示命令完全模式
    t::显示或隐藏进程和CPU状态信息
    m:显示或隐藏内存状态信息
    l:显示或隐藏uptime信息
    f:增加或减少进程显示标志
    S:累计模式,会把已完成或退出的子进程占用的CPU时间累计到父进程的MITE+
    P:按%CPU使用率排行
    T:按MITE+排行
    M:按%MEM排行
    u:指定显示用户进程
    r:修改进程renice值
    kkill:进程
    i:只显示正在运行的进程
    W:保存对top的设置到文件~/.toprc,下次启动将自动调用toprc文件的设置。
    h:帮助命令。
    q:退出
    
    pstree进程树
    pstree
    选项与参数:
    -A  :各程序树之间的连接以 ASCII 字符来连接;
    -U  :各程序树之间的连接以万国码的字符来连接。在某些终端接口下可能会有错误;
    -p  :并同时列出每个 process 的 PID;
    -u  :并同时列出每个 process 的所属帐号名称。
    
    进程的管理

    进程之间是可以互相控制的

    通过给予该进程一个信号(signal)去告知该进程你想要让她做什么

    kill -l  #会指出所有的信号
    kill -信号代号  进程的PID号  #通过命令信号代号对某某PID号进行操作
    信号代码      名称           内容
       1         SIGHUP         启动被终止的进程,可让该PID重新读取自己的配置文件,类似重新启动
       2         SIGINT         相当于用键盘输入ctrl-c来中断一个进程的进行
       9         SIGKILL        代表强制中断一个进程的进行,如果该进程运行到一半,那么尚未完成的部分可能会有半成品产生,类似vim会有.filename.swp保留下来
       15        SIGTERM        以正常的结束进程来终止该进程的运行。由于是正常的终止,所以后续的动作会将他完成。不过,如果该进程已经发生问题,就是无法使用正常的方法终止时,输入这个信号也是没有用的
       19        SIGSTOP        相当于键盘输入 ctrl-z来暂停一个进程的运行
    
    killall -1 进程名字
    

    vim编辑

    vim可分为三个命令模式:
    i进入编辑模式
    :进入命令模式
    ctrl + v 进入可视块模式 大写V进入可视行模式

    vim移动光标

    vim +10 filename  //编辑filename,并将光标置于第10行
    vim + filename //编辑filename,并将光标置于最后一行
    vim + /string filename //编辑filename,并将光标置于第一个字符(string)所在的行的行首
    

    其他命令

    ctrl + b #向上移动一页
    ctrl + f #向下移动一页
    gg(1G)  #光标移动到首行第一个字符处
    数字0 可以回到行首    h右移   j下移   k上移   l左移
    数字+j #向下移动n行,5h向右移动5个字符
    n+空格   //光标向右移动n个字符
    M  光标移动到屏幕中央那一行的第一个字符
    14G  光标移动到14行
    3+回车 光标向下移动3行
    G 光标移动到尾行
    $ 光标到一行末尾
     O 在当前行前一行新增一列且在插入模式
    :3,17d+回车  #删除第3行到第17行内容 复制可以把d改成y
    

    vim搜索替换

    :n1,n2s/old/new/g  #从第n1行到n2行直接搜索替换
    :1,$s/old/new/g  #从第一行到最后一行搜索
    :1,$s/old/new/gc  #加上c参数后在执行搜索替换前会提示用户确认
    :n1,n2S/old/nem/g #会把n1到n2行的数据截到下面去
    

    删除、复制和粘贴

    x  #删除光标后一个字符
    5x  #会删除光标后五个字符
    dd #删除光标所在行数据
    5dd #删除光标所在处下5行数据
    d1G #删除光标所在行到第一行的内容
    dG #删除光标所在行到最后一行的内容
    d$ #删除光标处到行尾的数据
    yy #复制光标所在行的数据
    5yy #复制光标所在行向下5行
    p  #复制
    u  #撤销
    ctrl + r # 重做上一个动作 撤销后执行可以返回
    
    指令模式下的操作
    :w newfilename  #另存为一个新的文件newfilename
    :r oldfilename  #读取一个文件到本文件中相当于追加
    :n1,n2 w [newfilename] #把n1到n2的内容,保存到新的文件
    :!+命令 #暂时离开vim 去执行一个命令
    :set nu #定义显示行号
    :set noun #不显示行号
    :set list  #显示特殊符号  制表符
    

    高级技巧

    vim 区块选择的意义

    v 字符选择,会将光标经过的地方反白选择
    V 行选择,会将光标经过的地方反白选择
    ctrl + v 区块选择 一行一行选择
    y 复制
    d 删除

    vim多档案编辑的按键

    vim file1 file2同时打开2个文件
    可执行如下操作
    :n #编辑下一个档案
    :N #编辑上一个档案
    :files #列出目前这个vim正打开的所有的文字等信息
    :q! #同时退出
    命令模式下输入 :sp #可以对一个文件以上下分方式进行双窗口编辑
    : sp filename #可以对2个文件以上下方式进行双窗口编辑
    ctrl + w +j 光标移动到下方窗口
    ctrl + w +k光标移动到上方窗口

    配置文件

    vi 的配置文件位置在每个用户的家目录下名字为:~/.vimrc
    在这个文件内可以定义一些vim的环境参数和快捷键等
    vim ~/.vimrc
    打开后可以设置参数

    练习

    请在 /tmp 这个目录下创建一个名为 vitest 的目录;
    进入 vitest 这个目录当中;
    链接:http://linux.vbird.org/linux_basic/0310vi/man_db.conf
    将 /etc/man_db.conf 复制到本目录下面(或由上述的链接下载 man_db.conf 文件);
    使用 vi 打开本目录下的 man_db.conf 这个文件;
    在 vi 中设置一下行号;
    移动到第 43 列,向右移动 59 个字符,请问你看到的小括号内是哪个文字?
    移动到第一列,并且向下搜寻一下“ gzip ”这个字串,请问他在第几列?
    接着下来,我要将 29 到 41 列之间的“小写 man 字串”改为“大写 MAN 字串”,并且一个一个挑选是否需要修改,如何下达指令?如果在挑选过程中一直按“y”, 结果会在最后一列出现改变了几个 man 呢?
    修改完之后,突然反悔了,要全部复原,有哪些方法?
    我要复制 66 到 71 这 6 列的内容(含有MANDB_MAP),并且贴到最后一列之后;
    113 到 128 列之间的开头为 # 符号的注解数据我不要了,要如何删除?
    将这个文件另存成一个 man.test.config 的文件名;
    去到第 25 列,并且删除 15 个字符,结果出现的第一个单字是什么?
    在第一列新增一列,该列内容输入“I am a student...”;
    储存后离开吧!
    整个步骤可以如下显示:
    “mkdir /tmp/vitest”
    “cd /tmp/vitest”

    “cp /etc/man_db.conf .”
    “/bin/vi man_db.conf”
    “:set nu”然后你会在画面中看到左侧出现数字即为行号。
    先按下“43G”再按下“59→”会看到“ as ”这个单字在小括号内;
    先执行“1G”或“gg”后,直接输入“/gzip”,则会去到第 93 列才对!
    直接下达“ :29,41s/man/MAN/gc ”即可!若一直按“y”最终会出现“在 13 列内置换 13 个字串”的说明。
    (1)简单的方法可以一直按“ u ”回复到原始状态,(2)使用不储存离开“ :q! ”之后,再重新读取一次该文件;
    “66G” 然后再“ 6yy ”之后最后一列会出现“复制6列”之类的说明字样。 按下“ G ”到最后一列,再给他“ p ”贴上6列!
    因为 113~128 共 16 列,因此“ 113G ”→“ 16dd ”就能删除 16 列,此时你会发现光标所在 113 列的地方变成 “ # Flags. ” 开头啰
    “ :w man.test.config ”,你会发现最后一列出现 "man.test.config" [New].. 的字样。
    “25G” 之后,再给他“ 15x ”即可删除 15 个字符,出现“ tree ”的字样;
    先“ 1G ”去到第一列,然后按下大写的“ O ”便新增一列且在插入模式;开始输入“I am a student...”后, 按下[Esc]回到一般指令模式等待后续工作;
    “:wq”

    相关文章

      网友评论

          本文标题:进程、vim

          本文链接:https://www.haomeiwen.com/subject/ikddrctx.html