进程、vim

2019-08-03  本文已影响0人  _str_

进程和线程

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

子进程和父进程

演示图.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”

上一篇下一篇

猜你喜欢

热点阅读