工作管理(job control)
由于Linux有7个基本终端机接口,面对多个工作是可以通过重复登录7个命令行界面的终端机环境,但是更加优异的方法是将多个工作只在一个bash中实现,即使用工作管理。
工作管理:在工作管理的行为中,每个工作都是目前bash的子进程,即彼此之间是有相关性的,不能以工作管理的方式由tty1的环境去管理tty2的bash,即只能管理自己的bash
直接将命令丢到后台中执行的&
在终端显示中,中括号内的号码为工作号码(job number),如[1],该号码与bash的控制有关,job number也搭配一个PID
使用&,运行过程中遇到stdout或者stderr
时,数据会输出到屏幕上影响界面,不过不会影响前台的操作,可以使用数据流重定向将输出内容输出到日志中。
使用&不怕被[ctrl]+c
将目前的工作丢到后台中暂停的[ctrl]+z
在vim编辑过程中,需要bash环境下的操作,可以使用,但是丢到后台当中的工作都是“暂停”状态
查看目前的后台工作状态jobs
命令:
jobs [-lrs]
参数:
-l: 列出PID
-r: 仅列出正在后台run的工作
-s: 仅列出正在后台当中暂停(stop)的工作
在终端的结果显示中,+代表默认的取用工作,即倒数第一个放置在后台中的工作号码。-代表倒数第二个放置到后台中的工作号码。
将后台工作拿到前台来处理: fg
命令:
fg %jobnumber
参数:
%jobnumber: jobnumber为工作号码,%符号可有可无
让工作在后台下的状态变成运行中: bg
将目前在后台的“暂停”工作转换为“运行”工作
命令:
bg %jobnumber
管理后台当中的工作: kill
命令:
kill -signal %jobnumber或者PID或者启动该进程的命令名称
signal:
-1: 重新读取一次参数的配置文件(类似reload)
-9: 立刻强制删除一个工作
-15: 以正常的程序方式终止一项工作
kill后面直接接数字默认会是PID,如果想要对工作号码进行管理,需要加上%。
删除某个进程可以使用PID或者是启动该进程的命令名称
删除某个服务,可以使用killall -signal commandName
,它可以将系统当中所有以某个命令名称启动的进程全部删除
脱机连接系统后台 nohup
命令:
nohup [命令与参数] 在终端机前台工作
nohup [命令与参数] 在终端机后台工作
退出使用exit
命令,注意:nohup不支持内置bash内置的命令
进程管理
1. 进程查看
静态查看进程的变化 ps
- 只能查阅自己bash程序:
ps -l
- 查看所有系统运行的程序:
ps aux
动态查看进程的变化 top
命令:
top [-d 数字] 或者 top [-bnp]
参数:
-d: 后面可以接秒数,即进程界面更新的秒数,默认是5秒
-b: 以批次的方式执行top,通常会搭配数据流重定向来将批处理的结果输出称为文件
-n: 与-b搭配,即需要进行几次top的输出结果
-p: 指定某个PID来进行查看检测
top执行过程中的可以使用的按键命令:
P: 以CPU的使用资源排序显示
M: 以内存的使用资源排序显示,默认排序
N: 以PID排序
q: 离开top软件的按键
top输出部分参数解读:
- %wa,即I/Owait,一般系统变慢都是I/O产生的问题
- Mem/Swap,物理内存与虚拟内存的使用情况,swap的使用量要尽量少,如果swap被大量使用,表示系统的物理内存不足
- PR: Priority的简写,进程的优先执行顺序,越小越早被执行
- NI: Nice的简写,与Priority有关,越小越早执行
找进程之间的相关性 pstree
pstree -Aup
参数:
-A: 各进程树之间的连接以ASCII字符来连接
-U: 各进程树之间的连接以utf-8d的字符来连接
-p: 同时列出每个进程的PID
2. 系统资源的查看
查看内存使用情况 free
free [-b|-k|-m|-g] [-t]
参数:
-b: 显示(bytes)单位
-m: 显示(MB)单位
-k: 显示(KB)单位
-g: 显示(GB)单位
其中显示的buffers
表示写入磁盘时的缓存,cached
表示读写磁盘时的缓存
查看系统与内核相关信息 uname
uname [-a]
参数:
-a: 所有系统相关信息
跟踪网络 netstat
作用: 查看有哪些进程启动网络或者主机开了哪几个端口
netstat -[atunlp]
参数:
-a: 将目前系统上所有的连接、监听、Socket数据都列出来
-t: 列出tcp网络数据包的数据
-u: 列出udp网络数据包的数据
-n: 不列出进程的服务名称,以端口号(port number)来显示
-l: 列出目前正在网络监听(listen)的服务
-p: 列出该网络服务的进程PID
一般为使用netstat
或者netstat -tlnp
即可。
查看内存中的进程目录 /proc
通过文件(或文件系统)找出正在使用该文件(或文件系统)的程序 fuser
作用: 由文件或者设备去找出使用该文件或设备的进程
fuser [-umv] [-k [i] [-signal]] file/dir
参数:
-u: 除进程的PID之外,同时列出该进程的所有者
-m: 会将后面接的文件名主动上提到该文件系统的顶层,即获取将该文件系统下所有文件。常用于查看某个文件系统下有多少进程正在占用该文件系统
-v: 列出每个文件与程序还有命令的完整相关性
-k: 找出使用该文件/目录的PID,并试图kill
-i: 必须与-k配合,删除PID之前会先询问用户意愿
一般使用 fuser -uv file/dir
,fuser -mvu file/dir
列出被进程所打开的文件名 lsof
作用: 查出某个进程打开或者使用的文件与设备
lsof [-aUu] [+d]
参数:
-a: 多项数据需要"同时成立"才显示出结果
-U: 仅列出socket文件类型
-u: 后面接username,列出该用户相关进程所打开的文件
+d: 后面接目录,即找出某个目录下面已经被打开的文件
一般使用 lsof +d /dev
,lsof -u root | grep bash
找出某个正在执行的进程的PID pidof
作用: 通过pidof并配合ps aux和正则表达式来找到程序内容
pidof [-sx] program_name
参数:
-s: 仅列出一个PID而不列出所有的PID
-x: 同时列出该program name可能的PPID那个进程的PID