- 1. Linux系统状态的查看及管理工具
- 2. pstree命令—{pstree}
- 3. ps 查看进程—{ps}
- 4. 进程优先级—{renice,nice,chrt}
- 5. 搜索进程—{lsof,pidof,pgrep,ps|grep}
- 6. uptime, w 命令—{uptime,w}
- 7. top命令—{top}
- 8. htop命令:EPEL源—{htop}
- 9. free 内存空间使用状态—{free}
- 10. vmstat命令:虚拟内存信息—{vmstat}
- 11. iostat:统计CPU和设备IO信息—{iostat}
- 12. iftop:显示带宽使用情况,EPEL源—{iftop}
- 13. pmap命令:进程对应的内存映射—{pmap}
- 14. glances命令:EPEL源—{glances}
- 15. dstat命令—{dstat}
- 16. iotop—{iotop}
- 17. nload 查看网络实时吞吐量—{nload}
- 18. lsof—{lsof}
- 19. kill命令—{kill}
- 20. killall -0 cmdname 的用法
- 21. 任务作业管理
1. Linux系统状态的查看及管理工具
pstree, ps, pidof, pgrep, top, htop,glance, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup
2. pstree命令—{pstree}
pstree : display a tree of processes
3. ps 查看进程—{ps}
ps: process state
ps report a snapshot of the current processes:查看ps命令执行时的进程快照- Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中
ps [OPTION]...
支持三种选项:
UNIX选项 如-A -e
BSD选项 如a
GNU选项 如--help
- 选项:
:不加任何选项时,默认显示**链接到当前终端中的进程**,无法显示别的终端中进程
a :选项包括链接到所有终端中的进程
x :选项包括不链接终端的进程
u :选项显示进程所有者的信息
f :选项显示进程树,相当于 --forest
L :显示支持的属性列表
o 属性… :显示定制的信息 pid、 cmd、 %cpu、 %mem
k|--sort 属性 :对属性排序,属性前加- 表示倒序
比如 ps aux k -%cpu ,注意后面的关键字要小写不能大写
3.1. 短格式(unix)特有选项
-C cmdlist :指定查看某个特定命令(cmdlist命令),多个命令查看的话用逗号,分隔
- 此选项也可以查看脚本,但要注意用 bash XXX.sh 方式运行的脚本无法查看, 同时如果脚本中没有 #!/bin/bash 就算是直接运行的脚本也无法查看了。
-L 显示线程 : pstree中花括号内就是线程,如果没有花括号代表进程只有一个线程(此命令就会显示进程了)
-e: 显示所有进程,相当于-A
-f: 显示完整格式程序信息
-F: 显示更完整格式的进程信息
-H: 以进程层级格式显示进程相关信息
-u userlist :指定有效的用户ID或名称
-U userlist :指定真正的用户ID或名称
-g gid或groupname :指定有效的gid或组名称
-G gid或groupname :指定真正的gid或组名称
-p pid :显示指pid的进程
--ppid pid :显示属于pid的子进程
-M :显示SELinux信息,相当于Z
- 注意:有效用户和真正用户区别,真正用户是指执行此进程的用户realuser,而有效用户代表此进程执行的的权限用户
- 比如普通用户执行passwd命令,真正用户为普通用户,但有效用户为root。(组类似)
- ps axo pid,cmd,user,ruser,euser ,其中 user和euser 相同意义,代表有效权限用户 ,ruser代表真正执行用户
3.2. ps 输出属性
VSZ: Virtual memory SiZe,虚拟内存集,线性内存
- 进程向操作系统申请的内存,它的数值可以很大,但并非全部都使用,是个虚拟内存,按照进程自己定义的地址方式来寻址使用
RSS: ReSident Size, 常驻内存集
- 内核真正分配的内存大小,常驻内存
STAT:进程状态
R:running
S: interruptable sleeping
D: uninterruptable sleeping
T: stopped
Z: zombie
+: 前台进程
l: 多线程进程
L:内存分页并带锁
N:低优先级进程
<: 高优先级进程
s: session leader,会话(子进程)发起者
START:进程启动的时间,和date相关
TIME:此进程启动后运行所占的时间片累计总时间
3.3. PS中优先级类别
ni(或者nice): nice值
pri: priority 优先级
psr: processor CPU编号
rtprio: 实时优先级
3.3.1. 附加知识(优先级命令)—{renice,nice,chrt}:
renice -n -10(优先级-20~19) 8814(PID),修改进程nice优先级nice -n -5 ping 1.1.1.1:直接指定命令的nice优先级,(默认为0改为-5) 3.chrt修改实时优先级,不过一般不调整它,它是系统自动分配设置的,一般只修改nice用户级别的优先级- 注意: pri优先级应该是和前面图中系统优先级刚好相反;不过有一个特例就是当realtime优先级为0时,它也为0,而不是40,其他的都还符合。
- 此项解释并不完全准确,具体准确的解释可以看官方文档解释(博客收藏)。
3.3.1.1. 优先级示例:
ps axo pid,cmd,psr,ni,pri,rtprio
常用组合:
aux
-ef
-eFH
-eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
3.4. ps示例:
- 查询你拥有的所有进程
ps -x - 显示指定用户名(RUID)或用户ID的进程
ps -fU apache
ps -fU 48 - 显示指定用户名(EUID)或用户ID的进程
ps -fu wang
ps -fu 1000 - 查看以root用户权限(实际和有效ID)运行的每个进程
ps -U root -u root - 列出某个组拥有的所有进程(实际组ID:RGID或名称)
ps -fG nginx - 列出有效组名称(或会话)所拥有的所有进程
ps -fg mysql
ps -fg 27 - 显示指定的进程ID对应的进程
ps -fp 1234 - 以父进程ID来显示其下所有的进程,如显示父进程为1234的所有进程
ps -f --ppid 1234 - 显示指定PID的多个进程
ps -fp 1204,1239,1263 - 要按tty显示所属进程
ps -ft pts/0 - 以进程树显示系统中的进程如何相互链接
ps -e --forest - 以进程树显示指定的进程
ps -f --forest -C sshd
ps -ef --forest | grep -v grep | grep sshd - 要显示一个进程的所有线程,将显示LWP(轻量级进程)以及NLWP(轻量级进程数)列
ps -fL -C nginx - 要列出所有格式说明符
ps L - 查看进程的PID,PPID,用户名和命令
ps -eo pid,ppid,user,cmd - 自定义格式显示文件系统组,ni值开始时间和进程的时间
ps -p 1234 -o pid,ppid,fgroup,ni,lstart,etime - 使用其PID查找进程名称:
ps -p 1244 -o comm= - 要以其名称选择特定进程,显示其所有子进程
ps -C sshd,bash - 查找指定进程名所有的所属PID,在编写需要从std输出或文件读取PID的脚本时这个参数很有用
ps -C httpd,sshd -o pid= - 检查一个进程的执行时间
ps -eo comm,etime,user | grep nginx - 查找占用最多内存和CPU的进程
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | headps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head - 显示安全信息
ps -eM
ps --context - 使用以下命令以用户定义的格式显示安全信息
ps -eo euser,ruser,suser,fuser,f,comm,label - 使用watch实用程序执行重复的输出以实现对就程进行实时的监视,如下面的命令显示每秒钟的监视
watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head'
4. 进程优先级—{renice,nice,chrt}
4.1. 进程优先级调整
- 静态优先级:100-139
- 进程默认启动时的nice值为0,优先级为120
- 只有根用户才能降低nice值(提高优先性)
4.2. nice命令
nice [OPTION] [COMMAND [ARG]...]
4.3. renice命令
renice [-n] priority pid...
4.4. 查看
ps axo pid,comm,ni
5. 搜索进程—{lsof,pidof,pgrep,ps|grep}
- 最灵活方式:
ps 选项 | 其它命令 - 按预定义的模式:
pgrep
pgrep [options] pattern
-u uid|用户名: effective user,生效者
-U uid|用户名: real user,真正发起运行命令者
-t terminal: 与指定终端相关的进程
-l: 显示进程名详细信息
例如:pgrep -lt pts/1
-a: 显示完整格式的进程名(更多详细信息)
-P pid: 显示指定进程的**子进程**
- 更多详细内容查看帮助即可
- 按确切的程序名称:
/sbin/pidofpidof bash- 注意它和lsof区别,lsof跟的是被打开的文件(或者程序,因为程序也是文件),pidof跟的就是进程名(程序如果没运行不是进程)
5.1. 例子:
pgrep -lU zhang
pgrep -aU zhang
pgrep -P 1
pgrep -at pts/1
pgrep -f sshd
pidof bash
5.2. Pidof更多用法
pidof 进程名 :
通过查看上面命令的$? 值可以判断进程是否停止运行了,因此就可以编写脚本监测必须运行的进程,一旦发现停止立马重新启动(配合计划任务使用极佳,当然也可以用killall 0 的方式也可)
例如:如果ping命令没有执行,则ping 127.0.0.1,如果ping命令已经执行(不管ping的IP地址是什么),则不执行ping 127.0.0.1
pidof ping &> /dev/null || ping 127.0.0.1
6. uptime, w 命令—{uptime,w}
/proc/uptime包括两个值,单位 s秒
系统启动时长,空闲进程的总时长(按总的CPU核心数计算)uptime和w
显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(当前时间往前1、 5、 10分钟的平均负载,一般不会超过1)- 系统平均负载:
指在特定时间间隔内运行队列中的平均进程数- 通常每个CPU内核的当前活动进程数不大于3,那么系统的性能良好。 如果每个CPU内核的任务数大于5,那么此主机的性能有严重问题
- 如果linux主机是1个双核CPU,当Load Average 为6的时候说明机器已经被充分使用
7. top命令—{top}
7.1. 排序:
P:以占据的CPU百分比,%CPU
M:占据内存百分比,%MEM
T:累积占据CPU时长,TIME+
7.2. 首部信息显示:
uptime信息:l命令
tasks及cpu信息:t命令
cpu分别显示:1 (数字)
memory信息:m命令
退出命令:q
修改刷新时间间隔:s
终止指定进程:k
保存文件:W
7.3. 栏位信息简介:
us:用户空间
sy:内核空间
ni:调整nice时间
id:空闲
wa:等待IO时间
hi:硬中断
si:软中断(模式切换)
st:虚拟机偷走的时间(虚拟化技术不成熟时期,不知道CPU的时间片执行了什么进程)
7.4. 选项:
-d # 指定刷新时间间隔,默认为3秒
-b 全部显示所有进程
-n # 刷新多少次后退出
-H 线程模式,示例:top -H -p \`pidof mysqld\`
8. htop命令:EPEL源—{htop}
8.1. 选项:
-d #: 指定延迟时间;
-u UserName: 仅显示指定用户的进程
-s COLUME: 以指定字段进行排序
8.2. 子命令:
s:跟踪选定进程的系统调用
l:显示选定进程打开的文件列表
a:将选定的进程绑定至某指定CPU核心
t:显示进程树
9. free 内存空间使用状态—{free}
free [option]
-b 以字节为单位
-m 以MB为单位
-g 以GB为单位
-h 易读格式
-o 不显示-/+buffers/cache行
-t 显示RAM + swap的总和
-s n 刷新间隔为n秒
-c n 刷新n次后即退出
9.1. 注意bufer和cache区别
- 简单来说一个注重写一个注重读,具体更详细参考 https://www.zhihu.com/question/26190832/answer/146259979
- 注意磁盘挂载的时候有选项可直接写入硬盘
mount -o sync,还有dd命令的直接写入不写内存的conv选项,同时TCP协议中报头数据psh位置也是表示内存是否立即取走。
10. vmstat命令:虚拟内存信息—{vmstat}
vmstat [options] [delay [count]]
vmstat 2 5
10.1. procs:
r:可运行(正运行或等待运行)进程的个数,和核心数有关
b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度),比如正在读取磁盘文件的进程(IO接口速度慢,需要耗费时间)
10.2. memory:
swpd: 交换内存的使用总量
free:空闲物理内存总量
buffer:用于buffer的内存总量
cache:用于cache的内存总量
10.3. swap:(注意是相对于内存的进和出来说的,磁盘进出下同)
si:从磁盘交换进内存的数据速率(kb/s)
so:从内存交换至磁盘的数据速率(kb/s)
10.4. io:
bi:从块设备读入数据到系统的速率(kb/s)
bo: 保存数据至块设备的速率
dd if=/dev/zero of=/dev/null bs=2G :则swap中 so先涨,然后si再涨
dd if=/dev/sda of=/dev/null :则io中的bi 涨 ,bo不变
dd if=/dev/zero of=/dev/sda1/bigfile :则io中的bi不变 ,bo涨
10.5. system:
in: interrupts 中断速率,包括时钟
cs: context switch 进程切换速率
10.6. cpu:
us:Time spent running non-kernel code
sy: Time spent running kernel code
id: Time spent idle. Linux 2.5.41前,包括IO-wait time.
wa: Time spent waiting for IO. 2.5.41前,包括in idle.
st: Time stolen from a virtual machine. 2.6.11前, unknown.
10.7. 选项:
-s: 显示内存的统计数据
11. iostat:统计CPU和设备IO信息—{iostat}
示例:iostat 1 10
12. iftop:显示带宽使用情况,EPEL源—{iftop}
示例:iftop -n -i eth1
13. pmap命令:进程对应的内存映射—{pmap}
查看进程占用了哪些内存空间,地址从哪到哪,以及一些调用的库函数
pmap [options] pid [...]
-x: 显示详细格式的信息
示例:
pmap 1
另外一种实现
cat /proc/PID/maps
用pmap来判断内存问题,看某个程序的内存占用是否一直增长判断它内存泄露
- 内存泄露:进程执行完毕不释放所占的内存空间
- 内存溢出:进程申请执行时所用的内存空间不够,直接霸占更多的内存空间进行使用(可能影响其他进程,如果多霸占的内存空间正好被其他进程使用中)
14. glances命令:EPEL源—{glances}
glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]
14.1. 内建命令:
a Sort processes automatically
c Sort processes by CPU%
m Sort processes by MEM%
p Sort processes by name
i Sort processes by I/O rate
d Show/hide disk I/O stats
f Show/hide file system stats
n Show/hide network stats
s Show/hide sensors stats
y Show/hide hddtemp stats
l Show/hide logs
b Bytes or bits for network I/O
w Delete warning logs
x Delete warning and critical logs
1 Global CPU or per-CPU stats
h Show/hide this help screen
t View network I/O as combination
u View cumulative network I/O
q Quit (Esc and Ctrl-C also work)
14.2. 常用选项:
-b: 以Byte为单位显示网卡数据速率
-d: 关闭磁盘I/O模块
-f /path/to/somefile: 设定输入文件位置
-o {HTML|CSV}:输出格式
-m: 禁用mount模块
-n: 禁用网络模块
-t #: 延迟时间间隔
-1:每个CPU的相关数据单独显示
14.3. C/S模式下运行glances命令
- 服务器模式:
glances -s -B IPADDR
IPADDR: 指明监听的本机哪个地址 - 客户端模式:
glances -c IPADDR
IPADDR:要连入的服务器端地址
- 注意两个主机上都要装有glances工具,并且版本要一致(6和6,7和7),然后开启服务器的监听功能之后,客户机就可以随时连接监听服务器端了。
15. dstat命令—{dstat}
- 系统资源统计,代替vmstat,iostat
dstat [-afv] [options..] [delay [count]]
-c 显示cpu相关信息
-C #,#,...,total
-d 显示disk相关信息
-D total,sda,sdb,...
-g 显示page相关统计数据
-m 显示memory相关统计数据
-n 显示network相关统计数据
-p 显示process相关统计数据
-r 显示io请求相关的统计数据
-s 显示swapped相关的统计数据
--tcp
--udp
--unix
--raw
--socket
--ipc
--top-cpu:显示最占用CPU的进程
--top-io: 显示最占用io的进程
--top-mem: 显示最占用内存的进程
--top-latency: 显示延迟最大的进程
16. iotop—{iotop}
iotop命令是一个用来监视磁盘I/O使用状况的top类工具iotop具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息,可查看每个进程是如何使用IO
16.1. iotop输出
第一行:Read和Write速率总计
第二行:实际的Read和Write速率
第三行:参数如下:
线程ID(按p切换为进程ID)
优先级
用户
磁盘读速率
磁盘写速率
swap交换百分比
IO等待所占的百分比
线程/进程命令
16.2. iotop常用参数
-o, --only只显示正在产生I/O的进程或线程,除了传参,可以在运行过程中按o生效
-b, --batch非交互模式,一般用来记录日志
-n NUM, --iter=NUM设置监测的次数,默认无限。在非交互模式下很有用
-d SEC, --delay=SEC设置每次监测的间隔,默认1秒,接受非整形数据例如1.1
-p PID, --pid=PID指定监测的进程/线程
-u USER, --user=USER指定监测某个用户产生的I/O
-P, --processes仅显示进程,默认iotop显示所有线程
-a, --accumulated显示累积的I/O,而不是带宽
-k, --kilobytes使用kB单位,而不是对人友好的单位。在非交互模式下,脚本编程有用
-t, --time 加上时间戳,非交互非模式
-q, --quiet 禁止头几行,非交互模式,有三种指定方式
-q 只在第一次监测时显示列名
-qq 永远不显示列名
-qqq 永远不显示I/O汇总
16.3. 交互按键
left和right方向键:改变排序
r:反向排序
o:切换至选项--only
p:切换至--processes选项
a:切换至--accumulated选项
q:退出
i:改变线程的优先级
17. nload 查看网络实时吞吐量—{nload}
nload是一个实时监控网络流量和带宽使用情况,以数值和动态图展示进出的流量情况
安装:yum -y install nload (EPEL源)
界面操作:
- 上下方向键、左右方向键、 enter键或者tab键都就可以切换查看多个网卡的流量情况
- 按 F2 显示选项窗口
- 按 q 或者 Ctrl+C 退出 nload
17.1. 示例:
nload:默认只查看第一个网络的流量进出情况
nload eth0 eth1:在nload后面指定网卡,可以指定多个
设置刷新间隔:默认刷新间隔是100毫秒,可通过-t命令设置刷新时间(单位是毫秒)
nload -t 500 eth0
设置单位:显示两种单位一种是显示Bit/s、一种是显示Byte/s,默认是以Bit/s,也可不显示/s
-u h|b|k|m|g|H|B|K|M|G
- 表示的含义:
h: auto, b: Bit/s, k: kBit/s, m: MBit/s, H:auto, B: Byte/s, K: kByte/s, M: MByte/s - 例子: nload -u M eth0
18. lsof—{lsof}
lsof:list open files 查看当前系统文件的工具。在linux环境下,一切皆文件,用户通过文件不仅可以访问常规数据,还可以访问网络连接和硬件如传输控制协议(TCP)和用户数据报协议(UDP)套接字等,系统在后台都为该应用程序分配了一个文件描述符
18.1. 命令参数
-a:列出打开文件存在的进程
-c<进程名>:列出指定进程所打开的文件
-g:列出GID号进程详情
-d<文件号>:列出占用该文件号的进程
+d<目录>:列出目录下被打开的文件
+D<目录>:递归列出目录下被打开的文件
-n<目录>:列出使用NFS的文件
-i<条件>:列出符合条件的进程(4、 6、协议、 :端口、 @ip )
-p<进程号>:列出指定进程号所打开的文件
-u:列出UID号进程详情
-h:显示帮助信息
-v:显示版本信息。
-n: 不反向解析网络名字
18.2. lsof示例
18.2.1. 进程管理
- 查看由登陆用户启动而非系统启动的进程
lsof /dev/pts/1 - 指定进程号,可以查看该进程打开的文件
lsof -p 9527
18.2.2. 文件管理
- 查看指定程序打开的文件
lsof -c httpd - 查看指定用户打开的文件
lsof -u root | more - 查看指定目录下被打开的文件
lsof +D /var/log/
lsof +d /var/log/
- 参数+D为递归列出目录下被打开的文件,参数+d为列出目录下被打开的文件
- 查看所有网络连接
lsof -i –n
lsof -i@127.0.0.1- 通过参数-i查看网络连接的情况,包括连接的ip、端口等以及一些服务的连接情况,例如:sshd等。也可以通过指定ip查看该ip的网络连接情况
- 查看端口连接情况
lsof -i :80 -n- 通过参数
-i :端口可以查看端口的占用情况,-i参数还有查看协议,ip的连接情况等
- 通过参数
- 查看指定进程打开的网络连接
lsof -i –n -a -p 9527- 参数-i、 -a、 -p等,-i查看网络连接情况,-a查看存在的进程,-p指定进程
- 查看指定状态的网络连接
lsof -n -P -i TCP -s TCP:ESTABLISHED-n:no host names, -P:no port names,-i TCP指定协议,-s指定协议状态通过多个参数可以清晰的查看网络连接情况、协议连接情况等
18.3. 恢复删除文件
前提是这个删除文件仍然被进程占用着还在内存中
```
lsof |grep /var/log/messages
rm -f /var/log/messages
lsof |grep /var/log/messages 或者 grep delete :这一步找到它的进程编号,下一步进入进程编号文件夹
cat /proc/653/fd/6
cat /proc/653/fd/6 > /var/log/messages
```
19. kill命令—{kill}
向进程发送控制信号,以实现对进程管理,每个信号对应一个数字,信号名称以SIG开、头(可省略),不区分大小写
显示当前系统可用信号: kill –l 或者 trap -l
19.1. 常用信号:man 7 signal
(1) SIGHUP 无须关闭进程而让其重读配置文件
(2) SIGINT 中止正在运行的进程;
相当于Ctrl+c 例如kill -2 `pidof ping`
(3) SIGQUIT 相当于ctrl+\
有些命令用它退出,可用 kill -QUIT `pidof bc`或者 kill -3
(9) SIGKILL 强制杀死正在运行的进程:强制退出
(15) SIGTERM 终止正在运行的进程:正常退出
(18) SIGCONT 继续运行
(19) SIGSTOP 后台休眠
19.2. 指定信号的方法
(1) 信号的数字标识:1, 2, 9
(2) 信号完整名称:SIGHUP
(3) 信号的简写名称:HUP
19.2.1. 举例:kill -1
cd /var/www/html
echo welcome to my web >index.html
curl 192.168.20.100
vim /etc/httpd/conf/httpd.conf :其中的页面文件位置修改为newhtml
mkdir newhtml
cd newhtml
vim index.html :重新写一个新的页面文件
ps auxf 或者 ps -ef 或者 pidof httpd|apache 或者 pstree -p
kill -1 apache的父进程pid(由root启动的那个pid)
kill -n 1 pid :注意一个带-一个不带-
19.2.2. 举例:kill -15 (默认)
ps aux |grep mingetty
kill mingettypid :此命令执行后发现pid号虽然没了,但是会生成一个新的pid号把它重新挂起
pstree -p :查看是哪一个父进程拉起mingetty,发现是1进程
kill 1 :杀不死1进程,但是此时再次执行 kill pidmingetty 发现它无法再自动起来了,说明此命令对于1进程还是有影响的
因此不要随便用kill杀进程,比如杀掉sshd服务,则远程将无法再次连接,必须在硬件主机上面重启sshd :systemctl start sshd 才可以再次使用,这将有可能出现严重问题
19.3. 按PID方式:
kill [-SIGNAL] pid …
kill –n SIGNAL pid
kill –s SIGNAL pid
19.4. 按名称:
killall [-SIGNAL] comm… :它可以一次性杀掉对应名字进程包含的所有pid ,而kill 一次只能杀掉一个
19.5. 按模式—{pkill}:
pkill [options] pattern (正则表达式)
19.5.1. pkill选项:
-SIGNAL :
-u uid: effective user,生效者
-U uid: real user,真正发起运行命令者
-t terminal: 与指定终端相关的进程
-l: 显示进程名(pgrep可用)
-a: 显示完整格式的进程名(pgrep可用)
-P pid: 显示指定进程的子进程
19.5.2. 举例:
pkill -9 -t pts/1 :把终端上全部进程杀掉包括bash shell
pkill pin.* :正则表达式模式法杀掉ping(或者pin开头的任意进程))
20. killall -0 cmdname 的用法
此命令不进行进程管理,但是会检查cmd名进程是否正常运行,类似于pidof ,把返回值存入$?中,用于判断cmd进程是否正常运行。
21. 任务作业管理
21.1. Linux的作业控制
- 前台作业:通过终端启动,且启动后一直占据终端
- 后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)
- 守护进程:和终端无关,后台运行
21.2. 让作业运行于后台
运行中的作业:
Ctrl+z,它会放入后端但是让它处于stop休眠状态尚未启动的作业:
COMMAND &- 注意:后台作业虽然被送往后台运行,但其依然与终端相关;退出当前终端,将关闭后台作业。如果希望送往后台后,剥离与终端的关系,有以下两种方式:
- nohup COMMAND &> /dev/null &
- screen;COMMAND
21.3. 查看当前终端所有作业:jobs
21.4. 作业控制:
fg [[%]JOB_NUM]:把指定的后台作业调回前台
bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行
kill [%JOB_NUM]: 终止指定的作业
21.5. 易混淆点:
killall -18手动开启休眠状态的进程 ,killall -19手动停止正在运行的进程。这两个命令和前端,后端没有任何关系,和终端也没有关系,只要能找到进程,就可用它操作(也可用pstree -p或则pidof或者ps aux找到进程编号然后kill -18 -19也可)进程和终端相关是因为它是在终端内开了个子shell来运行的,只要终端关闭(比如远程sshd服务终端关闭),父进程都关闭了那么它下面的无论是前端还是后端任务都将会关闭,例如关闭终端相当于关闭6681进程,则ping命令当然会关闭,无论前端后端。
├─sshd(6994)─┬─sshd(6681)───bash(6683)───ping(6773) │ └─sshd(129671)───bash(129673)───pstree(6808)
- 上面都是centos7中的逻辑,但是centos6中,如果终端关闭,则它下面的子进程会自动挂载到init上继续运行,注意区分。
- 因此用
nohup将命令运行之后,当终端关闭它会挂载到systemd上继续运行。或者还可用screen程序,则终端掉了也不会影响命令的执行。 - 注意,
command &和ctrl z的区别,- ctrl z:命令已经前台运行,将其调到后端不运行
- command & :command命令没有运行,让其调到后端运行。
- 注意
fg会把后端的进城调回到前端并运行,不管它在后端否运行还是不运行。同样的bg也是让进程调回到后端进行运行,只不过因为进程前段运行的时候无法操作,同时也没有jobs编号,所以已经运行进程要用ctrl+z调到后端停止运行,然后再用bg 启动运行。
21.6. nohup—{nohup}
nohup会有各种输出信息,会默认存放到文件中,类似于计划任务,要将它重定向到垃圾箱。
或者先重定向到自己的一个文件中,然后用脚本删除多少天以前的log日志。
再或者直接重定向到系统自己控制的log缓存文件夹中,它会自动清除。不过需要注意不能反复重定向一个文件,不然它一直在修改此文件的mtime,根据规则就不会自动清除它了。
Usage: nohup COMMAND [ARG]...
or: nohup OPTION
Run COMMAND, ignoring hangup signals.
--help display this help and exit
--version output version information and exit
If standard input is a terminal, redirect it from /dev/null.
If standard output is a terminal, append output to 'nohup.out' if possible,
'$HOME/nohup.out' otherwise.
If standard error is a terminal, redirect it to standard output.
To save output to FILE, use 'nohup COMMAND > FILE'.
21.7. 并行运行
同时运行多个进程,提高效率(相当于同时启动多个后台程序)
- 方法1,利用脚本运行(子shell)
vi all.sh
f1.sh &
f2.sh &
f3.sh &
- 然后运行此脚本
- 方法2 ,开启子shell命令环境运行
(f1.sh &);(f2.sh &);(f3.sh &) - 方法3:注意中括号边上有空格 ,在当前shell环境下运行
{ f1.sh & f2.sh & f3.sh & }
留言