1、進(jìn)程概念
進(jìn)程編號是PID,磁盤文件編號是inode
進(jìn)程(process)和線程(thread):一個進(jìn)程可能包含一個或多個線程,比如蓋一座大樓,團(tuán)隊就是一個進(jìn)程,一個人就是一個線程,線程占用的內(nèi)存空間小,省資源。
如下圖http進(jìn)程有很多個子進(jìn)程,子進(jìn)程又分成多個線程
2、進(jìn)程優(yōu)先級
進(jìn)程優(yōu)先級:
系統(tǒng)優(yōu)先級:數(shù)字越小,優(yōu)先級越高,各有140個運(yùn)行隊列和等待隊列
0-139(CentOS4,5)
0-98,99(CentOS6)
實時優(yōu)先級realtime:99-0:值最大優(yōu)先級最高
nice值:-20到19,對應(yīng)系統(tǒng)優(yōu)先級100-139或99
3、進(jìn)程內(nèi)存
內(nèi)存分頁存儲,一頁是4k。
LRU算法:來了一個數(shù)據(jù)就放到最上面,把下面的擠下去,如果來的數(shù)據(jù)內(nèi)存中本來就有,則把它調(diào)到最上面。
4、進(jìn)程分類
守護(hù)進(jìn)程: daemon,在系統(tǒng)引導(dǎo)過程中啟動的進(jìn)程,和終端無關(guān)進(jìn)程
前臺進(jìn)程:跟終端相關(guān),通過終端啟動的進(jìn)程,是用戶登錄之后啟動的進(jìn)程。
5、進(jìn)程狀態(tài)
運(yùn)行態(tài):running
就緒態(tài):ready
睡眠態(tài):sleep,睡眠態(tài)又分為可中斷和不可中斷的睡眠態(tài)
可中斷:interruptable
不可中斷:uninterruptable
停止態(tài):stopped,暫停于內(nèi)存,但不會被調(diào)度,除非手動啟動
僵死態(tài):zombie,在內(nèi)存中,不會被啟動的進(jìn)程,出了問題的進(jìn)程,會一直占用內(nèi)存。
6、PS命令
[root@centos6 html]#ps aux ---查看所有進(jìn)程,包括前臺進(jìn)程和守護(hù)進(jìn)程,u表示顯示進(jìn)程生效的所有者
VSZ: Virtual memory SiZe,虛擬內(nèi)存集,線性內(nèi)存,也就是系統(tǒng)承諾給的內(nèi)存
RSS: ReSidentSize, 常駐內(nèi)存集,實際用的內(nèi)存
一般情況下系統(tǒng)承諾給的內(nèi)存很多,但實際用的很少。
[root@centos6 ~]#ps auxf --f表示顯示進(jìn)程的父進(jìn)程
[root@centos6 ~]#ps axo pid,cmd,nice ---o指定顯示哪些特性
[root@centos6 ~]#ps -C vim f1 -C vim f2 o pid,cmd,nice --- -C選項可以顯示單獨(dú)的某一個進(jìn)程,默認(rèn)是全部顯示
[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:進(jìn)程狀態(tài)
R:running 運(yùn)行
S: interruptablesleeping 可中斷的睡眠態(tài)
D: uninterruptable sleeping 不可中斷的睡眠態(tài)
T: stopped --停止態(tài),手動可以被啟動
Z: zombie ---僵死態(tài),不可被啟動
+: 前臺進(jìn)程
l: 多線程進(jìn)程
L:內(nèi)存分頁并帶鎖
N:低優(yōu)先級進(jìn)程
<: 高優(yōu)先級進(jìn)程
s: session leader,會話(子進(jìn)程)發(fā)起者
7、進(jìn)程優(yōu)先級的調(diào)整
[root@centos6 ~]#renice -n -10 2410 ---調(diào)整nice優(yōu)先級為-10,2410是進(jìn)程編號
root@centos6 app]#nice -n -10 vim f1 ---指定優(yōu)先級打開某個程序
8、搜索進(jìn)程pgrep
[root@centos6 ~]#pgrep -lu dufu ---顯示生效者
2493 bash
[root@centos6 ~]#pgrep -lU dufu ---顯示正真發(fā)起運(yùn)行命令者
2493 bash
2571 passwd
[root@centos6 ~]#pgrep -lt pts/1 ---指定終端的進(jìn)程
2307 bash
2492 su
2493 bash
2571 passwd
-l 顯示進(jìn)程名
[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
總結(jié):查看某個進(jìn)程的編號,此方法可以寫到腳本里,用來判斷電腦上是否跑了某個進(jìn)程
9、uptime
顯示當(dāng)前時間,系統(tǒng)已啟動的時間、當(dāng)前上線人數(shù),系統(tǒng)平均負(fù)載(1、5、10分鐘的平均負(fù)載,一般不會超過1)
系統(tǒng)平均負(fù)載:
指在特定時間間隔內(nèi)運(yùn)行隊列中的平均進(jìn)程數(shù)
通常每個CPU內(nèi)核的當(dāng)前活動進(jìn)程數(shù)不大于3,那么系統(tǒng)的性能良好。如果每個CPU內(nèi)核的任務(wù)數(shù)大于5,那么此主機(jī)的性能有嚴(yán)重問題
如果linux主機(jī)是1個雙核CPU,當(dāng)Load Average 為6的時候說明機(jī)器已經(jīng)被充分使用
10、top命令
可以動態(tài)的顯示進(jìn)程的信息
選項:
-d #: 指定刷新時間間隔,默認(rèn)為3秒
-b: 全部顯示所有進(jìn)程
-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
欄位信息簡介
us:用戶空間;sy:內(nèi)核空間;ni:調(diào)整nice時間;id:空閑;wa:等待IO時間;hi:硬中斷;si:軟中斷(模式切換);st:虛擬機(jī)偷走的時間
內(nèi)置命令
排序:
P:以占據(jù)的CPU百分比,%CPU
M:占據(jù)內(nèi)存百分比,%MEM
T:累積占據(jù)CPU時長,TIME+
首部信息顯示:
uptime信息:l命令
tasks及cpu信息:t命令
cpu分別顯示:1 (數(shù)字)
memory信息:m命令
退出命令:q
修改刷新時間間隔:s
終止指定進(jìn)程:k
保存文件:W
查找?guī)椭畔ⅲ篽
11、vmstat命令
[root@centos6 yum.repos.d]#vmstat ---顯示虛擬內(nèi)存信息
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:從磁盤交換進(jìn)內(nèi)存的數(shù)據(jù)速率(kb/s),從交換分區(qū)到進(jìn)內(nèi)存,
so:從內(nèi)存交換至磁盤的數(shù)據(jù)速率(kb/s),從內(nèi)存出到swap分區(qū),因swap在磁盤上,所以是從內(nèi)存到磁盤
io:
bi:從塊設(shè)備讀入數(shù)據(jù)到系統(tǒng)的速率(kb/s),從塊設(shè)備讀入數(shù)據(jù)寫到內(nèi)存
bo: 保存數(shù)據(jù)至塊設(shè)備的速率,從內(nèi)存讀數(shù)據(jù)寫到塊設(shè)備
12、iostat命令
統(tǒng)計CPU和設(shè)備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
只統(tǒng)計某個磁盤[root@centos6 yum.repos.d]#iostat 1 10
表示1秒顯示一次,顯示10次
13、用glances命令監(jiān)控遠(yuǎn)程主機(jī)
服務(wù)器模式:
glances -s -B IPADDR
IPADDR: 指明監(jiān)聽的本機(jī)哪個地址,也可以不用-B指監(jiān)聽本地的所有IP地址。
客戶端模式:
glances -c IPADDR
IPADDR:要連入的服務(wù)器端地址
實例
centos7做為服務(wù)器,centos6做為客戶端,并且兩臺機(jī)器都安裝了glances
[root@redhat7 yum.repos.d]#glances -s ---指明glances服務(wù)已經(jīng)打開,端口是61209,可以監(jiān)聽本地的所有ip地址
Glances server is running on 0.0.0.0:61209
[root@redhat7 yum.repos.d]#glances -s -B 172.18.21.7
-B指明監(jiān)控本地的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 ---在客戶端指明要監(jiān)控遠(yuǎn)程主機(jī)的哪個ip地址,就可以遠(yuǎn)程監(jiān)控別的主機(jī)了
14、dstat命令
系統(tǒng)資源統(tǒng)計,代替vmstat,iostat
-c: 顯示cpu相關(guān)信息
-C #,#,...,total
-d: 顯示disk相關(guān)信息
-D total,sda,sdb,...
-g:顯示page相關(guān)統(tǒng)計數(shù)據(jù)
-m: 顯示memory相關(guān)統(tǒng)計數(shù)據(jù)
-n: 顯示network相關(guān)統(tǒng)計數(shù)據(jù)
-p: 顯示process相關(guān)統(tǒng)計數(shù)據(jù)
-r: 顯示io請求相關(guān)的統(tǒng)計數(shù)據(jù)
-s: 顯示swapped相關(guān)的統(tǒng)計數(shù)據(jù)
--tcp
--udp
--unix
--raw
--socket
--ipc
--top-cpu:顯示最占用CPU的進(jìn)程
--top-io: 顯示最占用io的進(jìn)程
--top-mem: 顯示最占用內(nèi)存的進(jìn)程
--top-latency: 顯示延遲最大的進(jìn)程
15、kill命令
向進(jìn)程發(fā)送控制信號,以實現(xiàn)對進(jìn)程管理,每個信號對應(yīng)一個數(shù)字,信號名稱以SIG開頭(可省略),不區(qū)分大小寫
顯示當(dāng)前系統(tǒng)可用信號:kill –l,trap-l
常用信號:man 7 signal
- SIGHUP: 無須關(guān)閉進(jìn)程而讓其重讀配置文件
- SIGINT: 中止正在運(yùn)行的進(jìn)程;相當(dāng)于Ctrl+c
- SIGQUIT:相當(dāng)于ctrl+=quit
- SIGKILL: 強(qiáng)制殺死正在運(yùn)行的進(jìn)程
- SIGTERM:終止正在運(yùn)行的進(jìn)程
- SIGCONT:繼續(xù)運(yùn)行
- SIGSTOP:后臺休眠
指定信號的方法:
(1) 信號的數(shù)字標(biāo)識: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
發(fā)零信號可以監(jiān)控某個程序是否正常運(yùn)行,但這種方法要知道進(jìn)程編號,如果程序退出進(jìn)程編號可能發(fā)生改變
[root@centos6 app]#killall -0 httpd &>/dev/null ||service httpd restart
killall 后面可以給跟名稱
按模式:pkill[options] pattern
-SIGNAL
-u uid: effective user,生效者
-U uid: real user,真正發(fā)起運(yùn)行命令者
-t terminal: 與指定終端相關(guān)的進(jìn)程
-l: 顯示進(jìn)程名(pgrep可用)
-a: 顯示完整格式的進(jìn)程名(pgrep可用)
-P pid: 顯示指定進(jìn)程的子進(jìn)程
[root@centos6 app]#pkill -9 -u dufu ---強(qiáng)制殺死dufu這個用戶的所有進(jìn)程
16、作業(yè)管理
[root@centos6 ~]#ping 172.8.0.1 & ---表示直接后臺運(yùn)行
[root@centos6 ~]#ping 172.18.0.1 ---按ctrl+z ping程序進(jìn)入后臺休眠
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進(jìn)程進(jìn)入后臺休眠
^Z
[2]+ Stopped sleep 100
[root@centos6 ~]#jobs ---查看當(dāng)前終端所有作業(yè),注意每個進(jìn)程的前面的號碼,用于轉(zhuǎn)入后臺運(yùn)行和后臺休眠時用
[1]- Stopped ping 172.18.0.1
[2]+ Stopped sleep 100
[root@centos6 ~]#bg 2 ---將sleep進(jìn)程轉(zhuǎn)入后臺運(yùn)行,因sleep的jobs號碼是2,所以bg 后面加2,bg為background后臺的簡寫
[2]+ sleep 100 &
[root@centos6 ~]#jobs ---只能看當(dāng)前這個終端,不能在其他終端里看
[1]+ Stopped ping 172.18.0.1
[2]- Running sleep 100 &
其中用killall 或者kill命令發(fā)信號時,可以在其他終端進(jìn)行,發(fā)19信號是由后臺運(yùn)行轉(zhuǎn)為后臺休眠,發(fā)18信號是由后臺休眠轉(zhuǎn)為后臺運(yùn)行
17 斷網(wǎng)恢復(fù)后仍可以在后臺運(yùn)行
之前學(xué)過的方法是用screen可以將斷網(wǎng)后的進(jìn)程恢復(fù),先輸入screen,然后運(yùn)行進(jìn)程,斷網(wǎng)后,輸入screen -ls查看一下,再輸入screen -r 就可以恢復(fù),下面是一種新的方法。
[root@centos6 ~]#nohup ping 172.18.0.1&>/dev/null & ---使用nohup并且后臺執(zhí)行
[1] 4737
[root@centos6 ~]#jobs
[1]+ Running nohup ping 172.18.0.1 &>/dev/null &
斷網(wǎng)后恢復(fù)
[root@centos6 ~]#pstree -p ---查看進(jìn)程樹,發(fā)現(xiàn)仍然在運(yùn)行
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) ---仍然在運(yùn)行
├─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 ---殺死進(jìn)程
[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并且前臺執(zhí)行
斷網(wǎng)后恢復(fù)
[root@centos6 ~]#ps aux |grep ping ---發(fā)現(xiàn)仍然在運(yùn)行
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) ---進(jìn)程樹發(fā)現(xiàn)也在運(yùn)行
├─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)
采用此種方法,將正在前臺運(yùn)行的進(jìn)程或者正在后臺運(yùn)行的進(jìn)程,斷網(wǎng)后,恢復(fù)網(wǎng)絡(luò)進(jìn)程仍然在后臺正在進(jìn)行,直到運(yùn)行結(jié)束進(jìn)程才會終止。
18、kill命令終止后臺正在運(yùn)行的進(jìn)程和后臺休眠的進(jìn)程
[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 轉(zhuǎn)為后臺休眠
[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 ---顯示已經(jīng)終止
[2]+ Terminated ping 172.18.0.1
[root@centos6 ~]#ps aux |grep ping ---查看進(jìn)程已經(jīng)查不到了
root 4867 0.0 0.0 103328 884 pts/0 S+ 20:05 0:00 grep ping
對于后臺正在運(yùn)行的進(jìn)程,此種方法也可以使用,先用jobs查一下編號,然后用kill %jobnum 就可以終止在后臺運(yùn)行的進(jìn)程,此種方法必須在同一個終端,因為jobs只能顯示在本終端的作業(yè)。
19 centos6和centos7斷網(wǎng)后的區(qū)別
[root@centos6 ~]#ping 172.18.0.1&
斷網(wǎng)后恢復(fù)
[root@centos6 ~]#ps aux|grep ping ---發(fā)現(xiàn)仍然在后臺運(yùn)行
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) ---發(fā)現(xiàn)進(jìn)程仍然在進(jìn)行
├─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&
斷網(wǎng)后恢復(fù)
[root@redhat7 ~]#ps aux |grep ping --發(fā)現(xiàn)已經(jīng)查不到了
root 5684 0.0 0.0 112660 972 pts/0 S+ 20:21 0:00 grep --color=auto ping
總結(jié):centos6中后臺運(yùn)行的進(jìn)程即使斷網(wǎng)了恢復(fù)后仍然在后臺運(yùn)行,但centos7卻不可以。