2018-04-10 进程管理

1、进程概念

进程编号是PID,磁盘文件编号是inode
进程(process)和线程(thread):一个进程可能包含一个或多个线程,比如盖一座大楼,团队就是一个进程,一个人就是一个线程,线程占用的内存空间小,省资源。
如下图http进程有很多个子进程,子进程又分成多个线程


image.png

2、进程优先级

image.png

进程优先级:
系统优先级:数字越小,优先级越高,各有140个运行队列和等待队列
0-139(CentOS4,5)
0-98,99(CentOS6)
实时优先级realtime:99-0:值最大优先级最高
nice值:-20到19,对应系统优先级100-139或99

3、进程内存

内存分页存储,一页是4k。
LRU算法:来了一个数据就放到最上面,把下面的挤下去,如果来的数据内存中本来就有,则把它调到最上面。

4、进程分类

守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程
前台进程:跟终端相关,通过终端启动的进程,是用户登录之后启动的进程。

5、进程状态

运行态:running
就绪态:ready
睡眠态:sleep,睡眠态又分为可中断和不可中断的睡眠态
可中断:interruptable
不可中断:uninterruptable
停止态:stopped,暂停于内存,但不会被调度,除非手动启动
僵死态:zombie,在内存中,不会被启动的进程,出了问题的进程,会一直占用内存。

6、PS命令

[root@centos6 html]#ps aux   ---查看所有进程,包括前台进程和守护进程,u表示显示进程生效的所有者

VSZ: Virtual memory SiZe,虚拟内存集,线性内存,也就是系统承诺给的内存
RSS: ReSidentSize, 常驻内存集,实际用的内存
一般情况下系统承诺给的内存很多,但实际用的很少。

[root@centos6 ~]#ps auxf --f表示显示进程的父进程
image.png
[root@centos6 ~]#ps axo pid,cmd,nice  ---o指定显示哪些特性
[root@centos6 ~]#ps -C vim f1 -C vim f2 o pid,cmd,nice  ---   -C选项可以显示单独的某一个进程,默认是全部显示
[root@centos6 ~]#ps axu |grep 2078  --还可以过滤
root       2078  0.0  0.3 177464  3880 ?        Ss   09:37   0:00 /usr/sbin/httpd
root       2485  0.0  0.0 103328   868 pts/0    R+   10:19   0:00 grep 2078

STAT:进程状态
R:running 运行
S: interruptablesleeping 可中断的睡眠态
D: uninterruptable sleeping 不可中断的睡眠态
T: stopped --停止态,手动可以被启动
Z: zombie ---僵死态,不可被启动
+: 前台进程
l: 多线程进程
L:内存分页并带锁
N:低优先级进程
<: 高优先级进程
s: session leader,会话(子进程)发起者

7、进程优先级的调整

[root@centos6 ~]#renice -n -10 2410  ---调整nice优先级为-10,2410是进程编号
root@centos6 app]#nice -n -10 vim f1  ---指定优先级打开某个程序

8、搜索进程pgrep

[root@centos6 ~]#pgrep -lu dufu   ---显示生效者
2493 bash
[root@centos6 ~]#pgrep -lU dufu  ---显示正真发起运行命令者
2493 bash
2571 passwd
[root@centos6 ~]#pgrep -lt pts/1 ---指定终端的进程
2307 bash
2492 su
2493 bash
2571 passwd
-l 显示进程名
[root@centos6 ~]#pidof vim
[root@centos6 ~]#echo $?
1
[root@centos6 ~]#pidof httpd
2088 2087 2086 2085 2084 2083 2082 2081 2078
[root@centos6 ~]#echo $?
0

总结:查看某个进程的编号,此方法可以写到脚本里,用来判断电脑上是否跑了某个进程

9、uptime

显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1、5、10分钟的平均负载,一般不会超过1)
系统平均负载:
指在特定时间间隔内运行队列中的平均进程数
通常每个CPU内核的当前活动进程数不大于3,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么此主机的性能有严重问题
如果linux主机是1个双核CPU,当Load Average 为6的时候说明机器已经被充分使用

10、top命令

可以动态的显示进程的信息
选项:
-d #: 指定刷新时间间隔,默认为3秒
-b: 全部显示所有进程
-n #: 刷新多少次后退出

[root@centos6 ~]#top 
top - 11:02:49 up  2:50,  4 users,  load average: 0.00, 0.00, 0.00
Tasks: 156 total,   1 running, 155 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1004112k total,   210440k used,   793672k free,     9580k buffers
Swap:  4194300k total,        0k used,  4194300k free,    55164k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND          
     1 root      20   0 19236 1496 1228 S  0.0  0.1   0:01.43 init              
     2 root      20   0     0    0    0 S  0.0  0.0   0:00.01 kthreadd          
     3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0       
     4 root      20   0     0    0    0 S  0.0  0.0   0:00.02 ksoftirqd/0       
     5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/0         
     6 root      RT   0     0    0    0 S  0.0  0.0   0:00.01 watchdog/0        
     7 root      RT   0     0    0    0 S  0.0  0.0   0:00.01 migration/1       
     8 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/1         
     9 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/1       
    10 root      RT   0     0    0    0 S  0.0  0.0   0:00.01 watchdog/1        
    11 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/2
image.png

栏位信息简介
us:用户空间;sy:内核空间;ni:调整nice时间;id:空闲;wa:等待IO时间;hi:硬中断;si:软中断(模式切换);st:虚拟机偷走的时间

内置命令
排序:
P:以占据的CPU百分比,%CPU
M:占据内存百分比,%MEM
T:累积占据CPU时长,TIME+
首部信息显示:
uptime信息:l命令
tasks及cpu信息:t命令
cpu分别显示:1 (数字)
memory信息:m命令
退出命令:q
修改刷新时间间隔:s
终止指定进程:k
保存文件:W
查找帮助信息:h

11、vmstat命令

[root@centos6 yum.repos.d]#vmstat  ---显示虚拟内存信息
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 710432  12100 135420    0    0     3     1    9    5  0  0 100  0  0   
[root@centos6 yum.repos.d]#vmstat 5 10  ---表示5秒显示一次,显示10次

swap:
si:从磁盘交换进内存的数据速率(kb/s),从交换分区到进内存,
so:从内存交换至磁盘的数据速率(kb/s),从内存出到swap分区,因swap在磁盘上,所以是从内存到磁盘
io:
bi:从块设备读入数据到系统的速率(kb/s),从块设备读入数据写到内存
bo: 保存数据至块设备的速率,从内存读数据写到块设备

12、iostat命令

统计CPU和设备IO信息

[root@centos6 yum.repos.d]#iostat
Linux 2.6.32-696.el6.x86_64 (centos6.9.magedu.com)  08/22/2017  _x86_64_    (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.06    0.00    0.28    0.03    0.00   99.63

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
scd0              0.03         0.17         0.00       3628          0
sda              10.08      1768.54       319.54   37974826    6861312
[root@centos6 yum.repos.d]#iostat sda
只统计某个磁盘[root@centos6 yum.repos.d]#iostat 1 10
表示1秒显示一次,显示10次

13、用glances命令监控远程主机

服务器模式:
glances -s -B IPADDR
IPADDR: 指明监听的本机哪个地址,也可以不用-B指监听本地的所有IP地址。
客户端模式:
glances -c IPADDR
IPADDR:要连入的服务器端地址

实例
centos7做为服务器,centos6做为客户端,并且两台机器都安装了glances

[root@redhat7 yum.repos.d]#glances -s  ---指明glances服务已经打开,端口是61209,可以监听本地的所有ip地址
Glances server is running on 0.0.0.0:61209
[root@redhat7 yum.repos.d]#glances -s -B 172.18.21.7 
-B指明监控本地的172.18.21.7的ip地址
Glances server is running on 172.18.21.7:61209
[root@centos6 yum.repos.d]#glances -c 172.18.21.7  ---在客户端指明要监控远程主机的哪个ip地址,就可以远程监控别的主机了
image.png

14、dstat命令

系统资源统计,代替vmstat,iostat

image.png

-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: 显示延迟最大的进程

15、kill命令

向进程发送控制信号,以实现对进程管理,每个信号对应一个数字,信号名称以SIG开头(可省略),不区分大小写
显示当前系统可用信号:kill –l,trap-l
常用信号:man 7 signal

  1. SIGHUP: 无须关闭进程而让其重读配置文件
  2. SIGINT: 中止正在运行的进程;相当于Ctrl+c
  3. SIGQUIT:相当于ctrl+=quit
  4. SIGKILL: 强制杀死正在运行的进程
  5. SIGTERM:终止正在运行的进程
  6. SIGCONT:继续运行
  7. SIGSTOP:后台休眠
    指定信号的方法:
    (1) 信号的数字标识:1, 2, 9
    (2) 信号完整名称:SIGHUP(3) 信号的简写名称:HUP

以下三种形式都可以

[root@centos6 app]#kill -1 4691 
[root@centos6 app]#kill -HUP 3915
[root@centos6 app]#kill -SIGHUP 3915
[root@centos6 app]#kill -0 4691 &>/dev/null ||service httpd restart 
发零信号可以监控某个程序是否正常运行,但这种方法要知道进程编号,如果程序退出进程编号可能发生改变
[root@centos6 app]#killall -0 httpd &>/dev/null ||service httpd restart
killall 后面可以给跟名称

按模式:pkill[options] pattern
-SIGNAL
-u uid: effective user,生效者
-U uid: real user,真正发起运行命令者
-t terminal: 与指定终端相关的进程
-l: 显示进程名(pgrep可用)
-a: 显示完整格式的进程名(pgrep可用)
-P pid: 显示指定进程的子进程

[root@centos6 app]#pkill -9 -u dufu  ---强制杀死dufu这个用户的所有进程

16、作业管理

[root@centos6 ~]#ping 172.8.0.1 &  ---表示直接后台运行
[root@centos6 ~]#ping 172.18.0.1   ---按ctrl+z ping程序进入后台休眠
PING 172.18.0.1 (172.18.0.1) 56(84) bytes of data.
64 bytes from 172.18.0.1: icmp_seq=1 ttl=64 time=0.535 ms
64 bytes from 172.18.0.1: icmp_seq=2 ttl=64 time=0.453 ms
64 bytes from 172.18.0.1: icmp_seq=3 ttl=64 time=0.407 ms
^Z
[1]+  Stopped                 ping 172.18.0.1
[root@centos6 ~]#sleep 100  ---按ctrl+z sleep进程进入后台休眠
^Z
[2]+  Stopped                 sleep 100
[root@centos6 ~]#jobs ---查看当前终端所有作业,注意每个进程的前面的号码,用于转入后台运行和后台休眠时用
[1]-  Stopped                 ping 172.18.0.1
[2]+  Stopped                 sleep 100
[root@centos6 ~]#bg 2  ---将sleep进程转入后台运行,因sleep的jobs号码是2,所以bg 后面加2,bg为background后台的简写
[2]+ sleep 100 &
[root@centos6 ~]#jobs ---只能看当前这个终端,不能在其他终端里看
[1]+  Stopped                 ping 172.18.0.1
[2]-  Running                 sleep 100 &
image.png

其中用killall 或者kill命令发信号时,可以在其他终端进行,发19信号是由后台运行转为后台休眠,发18信号是由后台休眠转为后台运行

17 断网恢复后仍可以在后台运行

之前学过的方法是用screen可以将断网后的进程恢复,先输入screen,然后运行进程,断网后,输入screen -ls查看一下,再输入screen -r 就可以恢复,下面是一种新的方法。

[root@centos6 ~]#nohup ping 172.18.0.1&>/dev/null &  ---使用nohup并且后台执行
[1] 4737
[root@centos6 ~]#jobs
[1]+  Running                 nohup ping 172.18.0.1 &>/dev/null &
断网后恢复
[root@centos6 ~]#pstree -p ---查看进程树,发现仍然在运行
init(1)─┬─atd(1681)
        ├─auditd(1424)───{auditd}(1425)
        ├─automount(1505)─┬─{automount}(1506)
        │                 ├─{automount}(1507)
        │                 ├─{automount}(1522)
        │                 └─{automount}(1525)
        ├─crond(1666)
        ├─dhclient(1367)
        ├─master(1652)───qmgr(1659)
        ├─mingetty(1694)
        ├─mingetty(1696)
        ├─mingetty(1698)
        ├─mingetty(1700)
        ├─mingetty(1702)
        ├─mingetty(1704)
        ├─ping(4737)   ---仍然在运行
        ├─rsyslogd(1446)─┬─{rsyslogd}(1447)
        │                ├─{rsyslogd}(1448)
        │                └─{rsyslogd}(1449)
        ├─sshd(1573)─┬─sshd(4691)───bash(4696)
        │            └─sshd(4742)───bash(4747)───pstree(4766)
        └─udevd(576)─┬─udevd(1711)
                     └─udevd(1712)
[root@centos6 ~]#ps aux|grep ping   ---搜索也可以搜到
root       4737  0.0  0.0 103268   740 ?        S    19:53   0:00 ping 172.18.0.1
root       4769  0.0  0.0 103328   880 pts/0    S+   19:55   0:00 grep ping
[root@centos6 ~]#killall ping  ---杀死进程
[root@centos6 ~]#ps aux|grep ping
root       4815  0.0  0.0 103328   880 pts/0    S+   20:00   0:00 grep ping
[root@centos6 ~]#nohup ping 172.18.0.1 ---使用nohup并且前台执行
断网后恢复
[root@centos6 ~]#ps aux |grep ping  ---发现仍然在运行
root       4872  0.0  0.0 103268   740 ?        S    20:07   0:00 ping 172.18.0.1
root       4897  0.0  0.0 103328   880 pts/0    S+   20:08   0:00 grep ping
[root@centos6 ~]#pstree -p
init(1)─┬─atd(1681)
        ├─auditd(1424)───{auditd}(1425)
        ├─automount(1505)─┬─{automount}(1506)
        │                 ├─{automount}(1507)
        │                 ├─{automount}(1522)
        │                 └─{automount}(1525)
        ├─crond(1666)
        ├─dhclient(1367)
        ├─master(1652)─┬─pickup(4767)
        │              └─qmgr(1659)
        ├─mingetty(1694)
        ├─mingetty(1696)
        ├─mingetty(1698)
        ├─mingetty(1700)
        ├─mingetty(1702)
        ├─mingetty(1704)
        ├─ping(4872)   ---进程树发现也在运行
        ├─rsyslogd(1446)─┬─{rsyslogd}(1447)
        │                ├─{rsyslogd}(1448)
        │                └─{rsyslogd}(1449)
        ├─sshd(1573)─┬─sshd(4691)───bash(4696)
        │            └─sshd(4873)───bash(4877)───pstree(4898)
        └─udevd(576)─┬─udevd(1711)
                     └─udevd(1712)

采用此种方法,将正在前台运行的进程或者正在后台运行的进程,断网后,恢复网络进程仍然在后台正在进行,直到运行结束进程才会终止。

18、kill命令终止后台正在运行的进程和后台休眠的进程

[root@centos6 ~]#ping 172.18.0.1
PING 172.18.0.1 (172.18.0.1) 56(84) bytes of data.
64 bytes from 172.18.0.1: icmp_seq=1 ttl=64 time=0.494 ms
64 bytes from 172.18.0.1: icmp_seq=2 ttl=64 time=0.486 ms
64 bytes from 172.18.0.1: icmp_seq=3 ttl=64 time=0.481 ms
^Z[1]   Terminated              ping 172.18.0.1  ---ctrl +z 转为后台休眠

[2]+  Stopped                 ping 172.18.0.1
[root@centos6 ~]#jobs 
[2]+  Stopped                 ping 172.18.0.1
[root@centos6 ~]#kill %2   ---2是jobs的编号

[2]+  Stopped                 ping 172.18.0.1
[root@centos6 ~]#jobs  ---显示已经终止
[2]+  Terminated              ping 172.18.0.1
[root@centos6 ~]#ps aux |grep ping  ---查看进程已经查不到了
root       4867  0.0  0.0 103328   884 pts/0    S+   20:05   0:00 grep ping

对于后台正在运行的进程,此种方法也可以使用,先用jobs查一下编号,然后用kill %jobnum 就可以终止在后台运行的进程,此种方法必须在同一个终端,因为jobs只能显示在本终端的作业。

19 centos6和centos7断网后的区别

[root@centos6 ~]#ping 172.18.0.1&
断网后恢复
[root@centos6 ~]#ps aux|grep ping  ---发现仍然在后台运行
root       4958  0.0  0.0 103268   744 ?        S    20:20   0:00 ping 172.18.0.1
root       4985  0.0  0.0 103328   884 pts/2    S+   20:21   0:00 grep ping
[root@centos6 ~]#pstree -p  
init(1)─┬─atd(1681)
        ├─auditd(1424)───{auditd}(1425)
        ├─automount(1505)─┬─{automount}(1506)
        │                 ├─{automount}(1507)
        │                 ├─{automount}(1522)
        │                 └─{automount}(1525)
        ├─crond(1666)
        ├─dhclient(1367)
        ├─master(1652)─┬─pickup(4767)
        │              └─qmgr(1659)
        ├─mingetty(1694)
        ├─mingetty(1696)
        ├─mingetty(1698)
        ├─mingetty(1700)
        ├─mingetty(1702)
        ├─mingetty(1704)
        ├─ping(4958)  ---发现进程仍然在进行
        ├─rsyslogd(1446)─┬─{rsyslogd}(1447)
        │                ├─{rsyslogd}(1448)
        │                └─{rsyslogd}(1449)
        ├─sshd(1573)─┬─sshd(4691)───bash(4696)
        │            └─sshd(4960)───bash(4964)───pstree(4988)
        └─udevd(576)─┬─udevd(1711)
                     └─udevd(1712)
[root@redhat7 app]#ping 172.18.0.1&
断网后恢复
[root@redhat7 ~]#ps aux |grep ping   --发现已经查不到了
root       5684  0.0  0.0 112660   972 pts/0    S+   20:21   0:00 grep --color=auto ping

总结:centos6中后台运行的进程即使断网了恢复后仍然在后台运行,但centos7却不可以。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,004评论 0 23
  • 操作系统概论 操作系统的概念 操作系统是指控制和管理计算机的软硬件资源,并合理的组织调度计算机的工作和资源的分配,...
    野狗子嗷嗷嗷阅读 11,748评论 3 34
  • Linux进程管理原理 Linux的进程管理,就是对硬件各资源进行分配、调度、销毁等工作,其主要部件的管理为:CP...
    魏镇坪阅读 1,176评论 0 6
  • 1郧老师是个高情商的人,是个懂的为别人着想的人,郧老师用简短的话语,用人格魅力征服了国粹堂的所有老师们。突然觉得人...
    幸运的修行阅读 135评论 0 0
  • 一个人的真实感受和自己认知到的感受是一样的么?
    明年你还爱我嘛阅读 164评论 0 1