进程管理

Process Manager


  • 工作管理 

    • jobs

    • ctrl+z,&

    • bg,fg

    • nohup

  • 进程,资源管理 

    • 查看:pstree,ps,top,vmstat,pmap

    • 查询:pgrep,pidof,fuser,lsof

    • 管理:kill,nice,renice

  • 管理软件or命令 

    • htop

    • glances

    • dstat

  • 任务计划 

    • at

    • crontab

  • 额外常用的命令和工具 

    • iostat

    • sar 

    • iftop


工作管理

什么是工作管理? 
工作管理(job control)能够有效的管理当前bash前景与背景中的工作,众所周知,一个终端只能同时进行一个工作,那如果我想多个工作同时进行怎么办,那就要用到所谓的工作管理的方法。

工作管理有什么用? 
将前景中的程序放到背景中暂定或运行,使得一个终端可以同时进行多项工作。

jobs:显示当前bash背景中所有的工作与状态

jobs [-l] [%job_id] :显示当前所有工作或指定的工作。

-l:显示PID

[root@xiao ~]# jobs
[1]   Stopped                 man ftp
[2]-  Stopped                 ping 192.168.0.1
[3]+  Stopped                 vim a

[JOB_ID]mark status  jobs_name

JOB_ID:工作的ID,以时间向上递增,数字越小,表示越早放入背景。
mark:标识进程顺序,'+'为当前工作,'-'为上一个工作,空为前两个之前的工作。
status:工作的状态,runing表示在背景中运行,stopped表示在背景中停止。
jobs_name:被放入背景中的工作内容或指令。

ctrl+z:将程序暂停并放入当前bash的背景中。

[root@xiao ~]# ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
^Z
[4]+  Stopped                 ping 192.168.0.1

&:将程序放入当前bash的背景中执行。

[root@xiao ~]# ping 192.168.0.1 &

bg:将背景中的工作状态变更为running。

bg [%jobs_id]

bg:将背景中的工作放回前景中执行。

fg [%jobs_id]


假设我们现在将一个工作丢入背景中去执行,然后我们就退出了当前终端,我们背景中的工作还会继续执行么?NO,因为我们其实使用ctrl+z或者&都只是将工作丢入当前终端的背景中,那如果我们想要把工作丢入系统背景中改怎么办,那就来看看nohup这个命令。

nohup:将工作丢入系统背景中,离线管理。

nohup [command] [&]

nohup ping 192.168.0.1       在前景中工作
nohup ping 192.168.0.1 &     在背景中工作

ps.由于是在系统前景背景中执行,所以所有输出都与当前终端无关,系统就会将输出信息保存在当前目录下nohup.out这个文件中。

进程,资源管理

什么是进程? 
进程(process)是程序运行时的一个对程序的一个copy,是一个程序的实例,存在自己的生命周期,即进程运行开始和进程结束。

进程有什么功能? 
能够让操作系统更加有效,有序的管理,使用计算机资源。

pstree:显示进程树

pstree [option] [pid | user]

    -a:all
   -p:显示PID
   ...

   [root@xiao ~]# pstree -p
   systemd(1)─┬─AliHids(1012)─┬─{AliHids}(1013)
      │               ├─{AliHids}(1014)
      │               ├─{AliHids}(1016)
      │               ├─{AliHids}(1017)
      │               ├─{AliHids}(1018)
      │               ├─{AliHids}(1020)

       ...

   ps.可以看出我的系统是centos6还是7呢?看第一个程序systemd就知道啦~,centos7啦!

ps:显示当前进程的快照信息。

ps [options]

a:以BSD风格显示当前终端的进程信息。       注意BSD风格是不带-的哦!
u:以BSD风格显示当前用户的进程信息。
x:以BSD风格显示与当前终端无关的信息。

-e:显示所有进程信息。
-l:显示长信息。
-f:显示全框架扩展信息。
-h:以树状显示。

常用用法:
   ps aux
   ps -elf
   ps -eh
   ...

字段含义:
[root@xiao ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3  41076  3532 ?        Ss   15:57   0:01 /usr/lib/systemd/systemd --switched-root --s
root         2  0.0  0.0      0     0 ?        S    15:57   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    15:57   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   15:57   0:00 [kworker/0:0H]

USER:进程的属主
PID:PID号
%CPU:占用的当前CPU百分比
%MEM:占用的当前内存百分比
VSZ:虚拟内存大小。
RSS TTY:常驻内存集大小,无法被交换的内存空间。
STAT:进程状态
   S:sleep,可中断睡眠。
   D:不可中断睡眠。
   R:running,运行中。
   T:stop,停止的。
   Z:zombie,僵尸程序。
   N:NICE,低优先级。
   <:高优先级。
   l:多线程进程。
   s:是多个进程的首进程。
   +:前台进程组进程。
START:被触发的时间
TIME:实际占用的CPU运行时间
COMMAND:触发的命令

top:动态显示当前系统状态及进程信息。

top [option]

-d #:#秒刷新一次。
-b:以批次刷新。
-n:刷新的次数。
-p:指定某一个PID单独检测。

top是一个以交互界面为主的监控当前系统资源,进程状态的工具。 **

交互命令:
   P:按照使用的CPU百分比排序。
   M:按照占用内存的百分比排序。
   T:按照实际占用的CPU时间和排序。
   N:按照PID排序。
   1:显示第一颗CPU核心信息
       ...
   k:按下k之后输入一个PID,然后输入信号传递执行。
   r:按下r之后输入一个PID,然后输入nice值设置。
   q:quit
   ...

字段含义:
top - 21:05:05 up  5:07,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:  96 total,   1 running,  95 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.3 st
KiB Mem :  1015476 total,   829448 free,    39864 used,   146164 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   838364 avail Mem

PID     USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                  
25      root      20   0       0      0      0 S  0.3  0.0   0:01.98 rcuos/0                                  

LINE1:
   21:05:05:系统当前时间。
   up  5:07:系统已经运行了多久。
   2 users:有几个用户在线。
   load average: 0.00, 0.01, 0.05  :CPU平均负载,1分钟,5分钟,15分钟。
LINE2:
   Tasks:  96 total:进程总数
   1 running:运行数量
   95 sleeping:睡眠数量  
   0 stopped:停止数量  
   0 zombie:僵尸数量
LINE3:
   0.0 us:用户空间占用CPU百分比  
   0.0 sy:内核空间占用CPU百分比  
   0.0 ni:更改过NICE值得进程所占用CPU百分比
   99.7 id:空闲的CPU百分比  
   0.0 wa:IO等待所占用的CPU百分比  
   0.0 hi:硬中断所占用的CPU百分比      
   0.0 si:软中断所占用的CPU百分比  
   0.3 st:虚拟化所占用的CPU百分比
LINE4:
   1015476 total:内存总大小
   829448 free:空闲的内存
   39864 used:被使用的内存
   146164 buff/cache:缓冲/缓存所占用的内存
LINE5:
   0 total:swap数量。
   0 free:swap空闲的数量
   0 used:使用的swap
   838364 avail Mem:真正可用的内存大小
LINE6
LINE7:
   PID:PID号
   USER:进程属主
   PR:进程优先级
   NI:NICE值
   VIRT:进程使用的虚拟内存总量。
   RES:进程使用的物理内存总量。
   SHR:共享内存大小。
   S:status
   %CPU:占用的当前CPU百分比
   %MEM:占用的当前内存百分比
   TIME:实际占用的CPU运行时间
   COMMAND:触发的命令

vmstat:显示当前虚拟内存状态

vmstat [option] [延迟秒数# 侦测次数#]
   -S [K | M]:单位,KB MB
   ...

字段含义:
[root@xiao ~]# vmstat -S M 1 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  0      0    810     18    124    0    0     6     1   71  200  0  0 100  0  0
0  0      0    810     18    124    0    0     0     0   90  214  0  1 99  0  0

r:运行中的进程数量
b:不可中断的进程数量
swpd:内存总量
free:空闲的内存
buff:缓冲区大小
cache:缓存区大小
si:swap in
so:swap out
bi:block in
bo:block out
in:系统终端次数
cs:系统事件切换次数
us:用户空间
sy:系统空间
id:cpu空闲
wa:IO读取占用CPU百分比
st:虚拟化占用CPU百分比

pmap:显示虚拟内存与物理地址空间的对应关系

pmap [PID]

[root@xiao ~]# pmap 1
1:   /usr/lib/systemd/systemd --switched-root --system --deserialize 21
00007f81aafbe000     16K r-x-- libuuid.so.1.3.0
00007f81aafc2000   2044K ----- libuuid.so.1.3.0
00007f81ab1c1000      4K r---- libuuid.so.1.3.0
00007f81ab1c2000      4K rw--- libuuid.so.1.3.0
00007f81ab1c3000    224K r-x-- libblkid.so.1.1.0
00007f81ab1fb000   2048K ----- libblkid.so.1.1.0
00007f81ab3fb000     12K r---- libblkid.so.1.1.0

pgrep:根据进程名查询进程PID

pgrep [-l 显示PID和P—NAME] [process_name]

pidof:根据进程名查询进程PID,类似pgrep

pidof [process_name]

fuser:根据文件查询PID

fuser [PATH]

lsof:列出当前系统所打开的文件

lsof [option] 
-u username : username 
-g giu : gid 


kill:传递一个信号给指定进程。

kill [-signal] [PID]

常用信号: 
   SIGHUP    1        终端线路挂断
   SIGINT    2        键盘输入的中断命令,从终端输入 Ctrl-C 时发生
   SIGKILL    9        KILL信号
   SIGTERM    15        正常结束

ps.具体的信号可参考  man signal  命令

nice:为一个进程设置nice值,只能将nice值向比较大的数字设置,无法设置-#。

nice -n # COMMAND

renice:为一个进程设置nice值,随意设置,需要#权限。

renice # PID

管理软件or命令 *

Linux中,对比TOP这些古老又经典的工具,还有有许多非常方便的软件可以供我们使用来监控管理系统,下面我们就来认识一下吧。

htop:交互式的查看进程信息,top的增强版

htop [option]

-d:更新频率。
-u:指定username
-p:指定pid

交互命令:

P:以CPU占用百分比排序。
M:以MEM占用百分比排序。
T:按实际占用的CPU运行时间的和来排序。
F1:打开帮助菜单。
F2:打开设置界面。
F3:按照PID或者USER字段查询,删除字段,需 ctrl+backspace。
F4:按照PID或者USER字段过滤,删除字段,需 ctrl+backspace。
F5:以树状显示进程。
F6:按照选择的字段排序。
F7:减小NICE值。
F8:加上NICE值。
F9:选定指定进程,传递选择的信号。
F10:退出,quit。

glances:一个跨平台的基于多视窗的监测工具

glances [option]

-t:指定刷新频率。
-s:启动service模式。
-c:启动client模式。
-P:指定service IP

交互命令:

a:自动排序。
c:CPU占用百分比排序。
m:MEM占用百分比排序。
p:进程名排序。
i:I/O速率,比例排序。
d:显示/隐藏 磁盘I/O状况。
f:显示/隐藏 文件系统状况。
n:显示/隐藏 网络状况。
s:显示/隐藏    sensors状况。
y:显示/隐藏 hddtemp状况。
z:隐藏/显示 process 列表
l:显示/隐藏 日志。
b:切换网络 bits和Bytes 的单位显示
w:删除警告日志信息。
x:删除警告和重要日志信息。
1:全局CPU或者每颗CPU的信息。
t:显示网络的组合I/O信息。
u:显示积累的网络I/O信息。
h:help
q:quit

dstat:生成系统资源统计工具

dstat [options] [刷新频率 [次数]]

-c [-C {cpu1,cpu2,total}...]:显示CPU信息与每颗的CPU核心信息。
-d [-D {sda,sdb,total}...]:显示磁盘与指定的磁盘信息。
-s [-S {swap1,swap2,total}...]:显示磁盘与指定的磁盘信息。
-m:menmory信息。
-n:network信息。
-p:process信息。
-r:I/O信息。
-s:system的信息,中断与事件交换。

任务计划

任务计划是什么? 
当我们要指定计算机在某一时刻执行某一任务就需要用到任务计划了。 
任务计划的功能? 
使系统在指定的时间执行指定的程序。

比如说我们想要在晚上11点发一封邮件给某人,或者定时每天晚上10点备份文件,那就要用到接下来的命令了!

at:单一任务计划设置

at [option] [TIME]

-l:列出当前所有计划。
-d [id]:删除计划。
-m:无论有没有输出都发一封邮件到用户邮箱。
-c [id]:列出任务要执行的详细指令内容

时间格式:

HH:MM YYYY-MM-DD       04:30 2016-05-30
[HH:MM YYYY-MM-DD,now]+[NUMBER# [minutes|hours|days|weeks]]  
   now+1day  
   4:00+2hour  
   5:00 2016-06-31+1hour

写入执行指令的方式:

1.直接在at的交互界面中写入,然后ctrl+d退出即可。
   [root@xiao ~]# at 5:00 2016-06-30+1 hour
   at> cat /etc/passwd
   at> <EOT>    按下ctrl+d
   job 18 at Thu Jun 30 06:00:00 2016
2.通过管道传输。
   [root@aliyun ~]# echo "cat /etc/passwd" | at 5:00 2016-06-30+1 hour
   job 19 at Thu Jun 30 06:00:00 2016
3.通过输入重定向(stdin).
   [root@aliyun ~]# at 5:00 2016-06-30+1 hour < a.sh
   job 20 at Thu Jun 30 06:00:00 2016

我们知道at只能设置一次任务计划,也就是说我们如果想要在每次的同一个时段执行一个命令,是无法完成的,所以,如果我们想要安排循环例行执行的任务计划就要使用接下来这个命令。。

crontab:设置循环例行任务计划

crontab [options] [-e]

    -u [username]:只有管理员才能使用,为指定用户设置任务计划。
   -l:查询crontab的工作内容。
   -r:移除所有的crontab的工作内容。
   -i:删除时先要确认。
   -e:编辑crontab的工作内容。

   [m] [h] [d] [m] [week] username command

时间格式:

*:所有的值。
135:指定多个值。
1-5:指定范围内的所有值。

/#:时间间隔, /2表示每两个小时。

crontab是怎么实现的呢?

cratab

crontab的文件

/etc/crontab:存放了crontab的系统设定档案,以及root的任务计划。
/etc/cron.d/*:存放了自我开发软体的系统设定档案和各自的任务计划。
   以上的设定档中其中设定了使用的shell ,可执行文件的PATH路径信息,邮件发送给哪个用户。
/var/spool/cron/USERNAME:存放了用户的任务计划档案。

额外常用的命令和工具

iostat:监控系统设备的io状况

iostat [options] [刷新频率[刷新次数]]

    -d:输出磁盘的io状况。
   -p [device]:指定磁盘。
   -c:输出cpu使用状况。
   -x:输出扩展信息    
   -t:输出搜集数据时的时间

sar:系统活动情况报告

sar [option] [刷新频率[刷新次数]]

    -u:输出CPU使用情况的统计信息
   -v:输出inode、文件和其他内核表的统计信息
   -d:输出每一个块设备的活动信息
   -r:输出内存和交换空间的统计信息
   -b:显示I/O和传送速率的统计信息
   -a:文件读写情况
   -c:输出进程统计信息,每秒创建的进程数
   -R:输出内存页面的统计信息
   -y:终端设备活动情况
   -w:输出系统交换活动信息
   -n {DEV|EDEV|NFS|NFSD|SOCK|ALL}:输出指定的网络信息

iftop:监测网卡实时流量,反向解析IP,显示端口信息。

iftop [option]

    -i [device]:指定监测的设备
   -B:单位为Byte
   -n:主机信息直接显示ip
   -N:端口信息直接显示端口号
   -F IP_ADDR/MASK:监测特定网络的流量

原创文章,作者:Net18_肖肖,如若转载,请注明出处:http://www.178linux.com/14350