Linux工作管理

工作管理(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

  1. 只能查阅自己bash程序: ps -l
  2. 查看所有系统运行的程序: 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输出部分参数解读:

  1. %wa,即I/Owait,一般系统变慢都是I/O产生的问题
  2. Mem/Swap,物理内存与虚拟内存的使用情况,swap的使用量要尽量少,如果swap被大量使用,表示系统的物理内存不足
  3. PR: Priority的简写,进程的优先执行顺序,越小越早被执行
  4. 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
Share